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

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

Nov 30, 2024 am 06:54 AM

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中文網其他相關文章!

  • 本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

    熱門文章

    倉庫:如何復興隊友
    3 週前 By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island冒險:如何獲得巨型種子
    3 週前 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
    1 週前 By 尊渡假赌尊渡假赌尊渡假赌

    熱門文章

    倉庫:如何復興隊友
    3 週前 By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island冒險:如何獲得巨型種子
    3 週前 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
    1 週前 By 尊渡假赌尊渡假赌尊渡假赌

    熱門文章標籤

    記事本++7.3.1

    記事本++7.3.1

    好用且免費的程式碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    強大的PHP整合開發環境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺化網頁開發工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級程式碼編輯軟體(SublimeText3)

    2025年的前4個JavaScript框架:React,Angular,Vue,Svelte 2025年的前4個JavaScript框架:React,Angular,Vue,Svelte Mar 07, 2025 pm 06:09 PM

    2025年的前4個JavaScript框架:React,Angular,Vue,Svelte

    Java的類負載機制如何起作用,包括不同的類載荷及其委託模型? Java的類負載機制如何起作用,包括不同的類載荷及其委託模型? Mar 17, 2025 pm 05:35 PM

    Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?

    如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案? 如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案? Mar 17, 2025 pm 05:46 PM

    如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?

    Node.js 20:關鍵性能提升和新功能 Node.js 20:關鍵性能提升和新功能 Mar 07, 2025 pm 06:12 PM

    Node.js 20:關鍵性能提升和新功能

    冰山:數據湖桌的未來 冰山:數據湖桌的未來 Mar 07, 2025 pm 06:31 PM

    冰山:數據湖桌的未來

    如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存? 如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存? Mar 17, 2025 pm 05:44 PM

    如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?

    如何在Java中實施功能編程技術? 如何在Java中實施功能編程技術? Mar 11, 2025 pm 05:51 PM

    如何在Java中實施功能編程技術?

    Spring Boot Snakeyaml 2.0 CVE-2022-1471問題已修復 Spring Boot Snakeyaml 2.0 CVE-2022-1471問題已修復 Mar 07, 2025 pm 05:52 PM

    Spring Boot Snakeyaml 2.0 CVE-2022-1471問題已修復

    See all articles