HTTP Status 500 - Could not write content: could not initialize proxy - no Session
程序员文章站
2022-06-19 16:38:47
分析出现no Session错误的原因以及给出解决方案: 使用SpringMVC + JSON数据返回时,经常会出现no Session的错误: 报错原因:因为懒加载在提取关联对象的属性值的时候发现EntityManager已经被关闭,就报no session错误。 控制器类中的方法上添加了@Res ......
分析出现no session错误的原因以及给出解决方案:
使用springmvc + json数据返回时,经常会出现no session的错误:
报错原因:因为懒加载在提取关联对象的属性值的时候发现entitymanager已经被关闭,就报no session错误。
控制器类中的方法上添加了@resporsebody注解,将方法的返回值利用jackson包自动转化为json字符串,然后放入响应消息体中,最后发送到浏览器;
然而jackson包都会自动调用对象的属性的get方法来获取属性的值拼接成json字符串,而调用get方法就需要自动发送sql语句去查询关联对象的数据,结果发现entitymanager对象已经关闭了,已经无法在通过entitymanager对象去查询关联对象的get方法,所以就会报 no session异常。
解决办法:让关闭entitymanager对象的动作延后到提取懒加载对象的数据之后再关闭。
具体做法:在web.xml中添加一个过滤器openentitymanagerinviewfilter,使entitymanager对象的开启和关闭在视图层发生。
<!-- 解决no session问题 --> <filter> <filter-name>nosessionfilter</filter-name> <filter-class>org.springframework.orm.jpa.support.openentitymanagerinviewfilter</filter-class> </filter> <filter-mapping> <filter-name>nosessionfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>