ホームページ >Java >&#&チュートリアル >遅延ロードされた Hibernate オブジェクトによる Jackson シリアル化エラーを回避するには?
フェッチされない遅延オブジェクトの 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 サイトの他の関連記事を参照してください。