SpringMVC杂记(七) Jackson与Hibernate LazyLoding无法正常工作解决方法
SpringMVC杂记(七) Jackson与Hibernate LazyLoding无法正常工作解决办法
SpringMVC杂记(七) Jackson与Hibernate LazyLoding无法正常工作解决办法
1) 如下代码
如果dao查找出来的列表中包含不完整的Entity最终SpringMVC会出现一个内部异常。
2) 有人写了一个插件专门来解决这个问题。
这里包含一个Moduel("com.fasterxml.jackson.module.hibernate.HibernateModule")实现,就像所有Jackson标准的Model注册一下就可以用了。
3) 可以自己写一个ObjectMapper的子类注册给"org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"
SpringMVC杂记(七) Jackson与Hibernate LazyLoding无法正常工作解决办法
1) 如下代码
@Controller @RequestMapping("/just") public class TestController { @Resource private EmployeeDao dao; @ResponseBody @RequestMapping("/test") public List<Employee> test() { return dao.findAllEmployees(); } }
如果dao查找出来的列表中包含不完整的Entity最终SpringMVC会出现一个内部异常。
2) 有人写了一个插件专门来解决这个问题。
<dependency> <groupId>com.fasterxml</groupId> <artifactId>jackson-module-hibernate</artifactId> <version>0.7.0</version> </dependency>
这里包含一个Moduel("com.fasterxml.jackson.module.hibernate.HibernateModule")实现,就像所有Jackson标准的Model注册一下就可以用了。
ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new HibernateModule());
3) 可以自己写一个ObjectMapper的子类注册给"org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"
package com.wicresoft.jpo.demo.json; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.SerializationConfig.Feature; import com.fasterxml.jackson.module.hibernate.HibernateModule; public class HibernateAwareObjectMapper extends ObjectMapper { public HibernateAwareObjectMapper() { HibernateModule hm = new HibernateModule(); registerModule(hm); configure(Feature.FAIL_ON_EMPTY_BEANS, false); } public void setPrettyPrint(boolean prettyPrint) { configure(Feature.INDENT_OUTPUT, prettyPrint); } }
<mvc:annotation-driven conversion-service="conversion-service" validator="validator"> <mvc:message-converters register-defaults="false"> <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" /> <bean class="org.springframework.http.converter.FormHttpMessageConverter" /> <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" /> <!-- 修改为以下配置即可 --> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> <property name="objectMapper"> <bean class="com.wicresoft.jpo.demo.json.HibernateAwareObjectMapper"> <property name="prettyPrint" value="true" /> </bean> </property> </bean> <bean class="org.springframework.http.converter.StringHttpMessageConverter" /> <bean class="com.wicresoft.jpo.demo.http.converter.UTF8StringHttpMessageConverter" /> </mvc:message-converters> </mvc:annotation-driven>