当序列化Hibernate对象时,抛出了一个奇怪的Jackson异常。

12 浏览
0 Comments

当序列化Hibernate对象时,抛出了一个奇怪的Jackson异常。

Jackson抛出了一个奇怪的异常,我不知道如何修复。我正在使用Spring,Hibernate和Jackson。

我已经考虑到延迟加载导致了问题,但我已经采取措施告诉Jackson不要处理各种属性,如下所示:

@JsonIgnoreProperties({"sentMessages", "receivedMessages", "educationFacility"})
public class Director extends UserAccount implements EducationFacilityUser {
   ....
}

我对所有其他UserAccount子类也做了同样的事情。

这是抛出的异常:

org.codehaus.jackson.map.JsonMappingException:找不到类org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer的序列化器,也没有发现创建BeanSerializer的属性(要避免异常,请禁用SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS))(通过引用链: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:/

0