一尘不染

序列化Hibernate对象时引发奇怪的Jackson异常

hibernate

杰克逊抛出了一个奇怪的异常,我不知道该如何解决。我正在使用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 ()方法。GRR
!!有什么办法可以告诉杰克逊不处理代理上的任何内容,还是我可以解决?这真的很奇怪,因为吐出JSON的方法只会在某些情况下崩溃,而不是一直崩溃。尽管如此,这是由于代理对象上的get
()方法所致。

除了:代理是邪恶的。它们破坏了Jackson,equals()和常规Java编程的许多其他部分。我很想完全放弃hibernate:/


阅读 344

收藏
2020-06-20

共1个答案

一尘不染

这不是很理想,但是您可以@JsonAutoDetect在类级别使用禁用Jackson的JSON属性自动发现功能。这样可以防止它尝试处理Javassist的内容(并失败)。

这意味着您随后必须手动对每个getter进行注释(使用@JsonProperty),但这并不一定是一件坏事,因为它可以使事情保持明确。

2020-06-20