遅延フェッチされたオブジェクトに対する Jackson のシリアル化を回避する
この記事では、Jackson がフェッチされていない遅延ロードされたオブジェクトをシリアル化しないようにするという課題について説明します。 Hibernate 関連の結果
概要
提供されたシナリオでは、遅延フェッチされた座標リストを持つ User オブジェクトは、次の場合に「プロキシを初期化できませんでした - セッションがありません」例外を引き起こします。ジャクソンはオブジェクトをシリアル化しようとします。これは、Jackson がシリアル化の前に熱心に座標をフェッチし、遅延読み込みメカニズムに違反しているためです。
解決策
この解決策には、Hibernate4Module を組み込んだカスタム マッピング コンバータの統合が含まれます。このモジュールは、遅延ロード オブジェクトに対する Jackson のサポートを強化します。
Spring Java Configuration
@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 Configuration
<bean class="com.pastelstudios.json.HibernateAwareObjectMapper">
<mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper" ref="hibernateAwareObjectMapper" /> </bean> </mvc:message-converters>
このソリューションを実装することで、Jackson は次のようになります。シリアル化中にフェッチされていない遅延オブジェクトを積極的にフェッチすることを防ぎ、例外を解決し、遅延読み込み動作を維持します。
以上がJackson が遅延フェッチされた Hibernate オブジェクトをシリアル化しないようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。