避免在延迟获取的对象上进行 Jackson 序列化
本文解决了防止 Jackson 序列化未获取的延迟加载对象的挑战,这可以结果与 Hibernate 相关
简介
在提供的场景中,具有延迟获取坐标列表的 User 对象会在以下情况下导致“无法初始化代理 - 无会话”异常: Jackson 尝试序列化该对象。这是因为 Jackson 在序列化之前急切地获取坐标,违反了延迟加载机制。
解决方案
解决方案涉及集成一个包含 Hibernate4Module 的自定义映射转换器。该模块增强了 Jackson 对延迟加载对象的支持。
Spring Java 配置
@Configuration @EnableWebMvc public class MyConfigClass extends WebMvcConfigurerAdapter{ public MappingJackson2HttpMessageConverter jacksonMessageConverter(){ MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter(); ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new Hibernate4Module()); messageConverter.setObjectMapper(mapper); return messageConverter; } @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(jacksonMessageConverter()); super.configureMessageConverters(converters); } }
public @ResponseBody User getUser(@PathVariable String username) { User user = userService.getUser(username); return user; }
Spring XML 配置
<bean class="com.pastelstudios.json.HibernateAwareObjectMapper">
<mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper" ref="hibernateAwareObjectMapper" /> </bean> </mvc:message-converters>
通过实现此解决方案,可以防止 Jackson 在序列化过程中急切地获取未获取的延迟对象,解决异常并保留延迟加载行为。
以上是如何防止 Jackson 序列化延迟获取的 Hibernate 对象?的详细内容。更多信息请关注PHP中文网其他相关文章!