避免在延遲取得的物件上進行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; }
建立個人化映射器,如連結教學中所述:
<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 序列化延遲所取得的 Hibernate 物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!