首頁 > Java > java教程 > 如何防止 Jackson 序列化延遲所取得的 Hibernate 物件?

如何防止 Jackson 序列化延遲所取得的 Hibernate 物件?

Susan Sarandon
發布: 2024-11-30 06:54:16
原創
471 人瀏覽過

How to Prevent Jackson from Serializing Lazy-Fetched Hibernate Objects?

避免在延遲取得的物件上進行Jackson 序列化

本文解決了防止Jackson 序列化未取得的延遲載入物件的挑戰,這可以結果與Hibernate相關

簡介

在提供的場景中,具有延遲獲取坐標列表的User 對象會在以下情況下導致“無法初始化代理- 無會話”異常: Jackson 嘗試序列化該物件。這是因為 Jackson 在序列化之前急切地獲取座標,違反了延遲載入機制。

解決方案

解決方案涉及整合一個包含 Hibernate4Module 的自訂映射轉換器。此模組增強了 Jackson 對延遲載入物件的支援。

Spring Java 配置

  1. 建立一個擴充WebMvcConfigurerAdapter 並覆寫configureMessageConverters 的設定類別:
@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">
    登入後複製
    設定MappingJackson2HttpMessageConverter 使用個人化映射器:
    透過實現此解決方案,可以防止Jackson 在序列化過程中急切地獲取未完成過程中取得的延遲對象,解決異常並保留延遲載入行為。
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="objectMapper" ref="hibernateAwareObjectMapper" />
        </bean>
    </mvc:message-converters>
    登入後複製

    以上是如何防止 Jackson 序列化延遲所取得的 Hibernate 物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

  • 來源:php.cn
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    作者最新文章
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板