避免未获取的惰性对象的 Jackson 序列化
Jackson 是一个流行的数据绑定 Java 库,在使用以下命令序列化对象时可能会遇到问题延迟获取的属性。在这种情况下,未加载到会话中的未获取的属性会在序列化期间导致“无法初始化代理 - 无会话”异常。
解决方案:
为了解决这个问题,我们需要通知 Jackson 在序列化期间忽略延迟获取的属性。在旧版本的 Spring(3.1 及更低版本)中,这是通过创建自定义 HibernateAwareObjectMapper 并将其添加到自定义 MappingJackson2HttpMessageConverter 来实现的。
但是,在 Spring 3.1.2 及更高版本中,Spring 提供了自己的 MappingJackson2HttpMessageConverter包括必要的功能。我们可以配置此转换器并将其添加到应用程序的 HttpMessageConverters。
实现:
Java 配置:
@Configuration @EnableWebMvc public class MyConfigClass extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(jacksonMessageConverter()); super.configureMessageConverters(converters); } public MappingJackson2HttpMessageConverter jacksonMessageConverter() { MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter(); ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new Hibernate4Module()); messageConverter.setObjectMapper(mapper); return messageConverter; } }
XML配置:
<mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="com.pastelstudios.json.HibernateAwareObjectMapper" /> </property> </bean> </mvc:message-converters>
通过配置 MappingJackson2HttpMessageConverter 以使用 Hibernate4Module,Jackson 将被指示在序列化期间忽略延迟获取的属性。这解决了未初始化代理的问题,并允许您的控制器返回 User 对象而不会遇到序列化错误。
以上是如何避免延迟加载 Hibernate 对象的 Jackson 序列化错误?的详细内容。更多信息请关注PHP中文网其他相关文章!