ジャクソンは、修正方法がわからない奇妙な例外をスローしています。私はSpring、Hibernate、およびJacksonを使用しています。
遅延読み込みが問題の原因であると既に考えましたが、次のように Jackson にさまざまなプロパティを処理しないように指示する手段を講じました。
@JsonIgnoreProperties({ "sentMessages", "receivedMessages", "educationFacility" })
public class Director extends UserAccount implements EducationFacilityUser {
....
}
他のすべての UserAccount サブクラスについても同じことを行いました。
スローされる例外は次のとおりです。
org.codehaus.jackson.map.JsonMappingException: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: java.util.ArrayList[46]->jobprep.domain.educationfacility.Director_$$_javassist_2["handler"])
at org.codehaus.jackson.map.ser.StdSerializerProvider$1.serialize(StdSerializerProvider.java:62)
at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:268)
at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:146)
at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:118)
at org.codehaus.jackson.map.ser.ContainerSerializers$IndexedListSerializer.serializeContents(ContainerSerializers.java:236)
at org.codehaus.jackson.map.ser.ContainerSerializers$IndexedListSerializer.serializeContents(ContainerSerializers.java:189)
at org.codehaus.jackson.map.ser.ContainerSerializers$AsArraySerializer.serialize(ContainerSerializers.java:111)
at org.codehaus.jackson.map.ser.StdSerializerProvider._serializeValue(StdSerializerProvider.java:296)
at org.codehaus.jackson.map.ser.StdSerializerProvider.serializeValue(StdSerializerProvider.java:224)
at org.codehaus.jackson.map.ObjectMapper.writeValue(ObjectMapper.java:925)
at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.writeInternal(MappingJacksonHttpMessageConverter.java:153)
これを引き起こしている原因を確認するために詳細情報を取得する方法についての提案はありますか? 誰でもそれを修正する方法を知っていますか?
編集: getHander() およびその他の get*() メソッドがプロキシ オブジェクトに存在することを発見しました。ぐらっ!Jackson にプロキシで何も処理しないように指示する方法はありますか? JSON を吐き出すメソッドは、常にではなく、特定の状況でのみクラッシュするため、これは非常に奇妙です。それにもかかわらず、これはプロキシ オブジェクトの get*() メソッドによるものです。
余談: プロキシは悪です。それらは、Jackson、equals()、および通常の Java プログラミングの他の多くの部分を混乱させます。私はHibernateを完全に捨てたいと思っています:/