ホームページ >Java >&#&チュートリアル >遅延ロードされた Hibernate オブジェクトによる Jackson シリアル化エラーを回避するには?

遅延ロードされた Hibernate オブジェクトによる Jackson シリアル化エラーを回避するには?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-02 00:20:08755ブラウズ

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

フェッチされない遅延オブジェクトの Jackson シリアル化の回避

データ バインディング用の人気のある Java ライブラリである Jackson では、次のオブジェクトを使用してオブジェクトをシリアル化するときに問題が発生する可能性があります。遅延フェッチされたプロパティ。この場合、セッションに読み込まれていないフェッチされていないプロパティにより、シリアル化中に「プロキシを初期化できませんでした - セッションがありません」という例外が発生します。

解決策:

この問題を解決するには、シリアル化中に遅延フェッチされたプロパティを無視するように Jackson に通知する必要があります。 Spring の古いバージョン (3.1 以下) では、カスタム HibernateAwareObjectMapper を作成し、それをカスタム MappingJackson2HttpMessageConverter に追加することでこれを実現していました。

ただし、Spring バージョン 3.1.2 以降では、Spring は独自の MappingJackson2HttpMessageConverter を提供します。必要な機能が含まれています。このコンバータを構成して、アプリケーションの HttpMessageConverters に追加できます。

実装:

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構成:

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

Hibernate4Module を使用するように MappingJackson2HttpMessageConverter を構成すると、Jackson はシリアル化中に遅延フェッチされたプロパティを無視するように指示されます。これにより、初期化されていないプロキシの問題が解決され、コントローラーはシリアル化エラーが発生することなくユーザー オブジェクトを返すことができるようになります。

以上が遅延ロードされた Hibernate オブジェクトによる Jackson シリアル化エラーを回避するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。