Rumah >Java >javaTutorial >Bagaimana untuk Mengelakkan Ralat Pensirilan Jackson dengan Objek Hibernate yang Dimuat Malas?

Bagaimana untuk Mengelakkan Ralat Pensirilan Jackson dengan Objek Hibernate yang Dimuat Malas?

Susan Sarandon
Susan Sarandonasal
2024-12-02 00:20:08755semak imbas

How to Avoid Jackson Serialization Errors with Lazy-Loaded Hibernate Objects?

Mengelakkan Pensirilan Jackson bagi Objek Malas Tidak Diambil

Jackson, perpustakaan Java yang popular untuk pengikatan data, boleh menghadapi masalah apabila mensiri objek dengan sifat malas diambil. Dalam kes ini, sifat yang tidak diambil, yang tidak dimuatkan ke dalam sesi, menyebabkan pengecualian "tidak dapat memulakan proksi - tiada Sesi" semasa bersiri.

Penyelesaian:

Untuk menyelesaikan isu ini, kami perlu memaklumkan Jackson untuk mengabaikan sifat yang diambil secara malas semasa penyirian. Dalam versi Spring yang lebih lama (3.1 dan ke bawah), ini dicapai dengan mencipta HibernateAwareObjectMapper tersuai dan menambahkannya pada MappingJackson2HttpMessageConverter tersuai.

Walau bagaimanapun, dalam versi Spring 3.1.2 dan ke atas, Spring menyediakan MappingJackson2HttpMessageConverter sendiri yang termasuk fungsi yang diperlukan. Kami boleh mengkonfigurasi penukar ini dan menambahkannya pada HttpMessageConverters aplikasi.

Pelaksanaan:

Konfigurasi 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 Konfigurasi:

<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>

Dengan mengkonfigurasi MappingJackson2HttpMessageConverter untuk menggunakan Hibernate4Module, Jackson akan diarahkan untuk mengabaikan sifat yang diambil malas semasa bersiri. Ini menyelesaikan isu proksi yang tidak dimulakan dan membenarkan pengawal anda memulangkan objek Pengguna tanpa menghadapi ralat penyirian.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Ralat Pensirilan Jackson dengan Objek Hibernate yang Dimuat Malas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn