相关疑难解决方法(0)

序列化Hibernate对象时抛出奇怪的Jackson异常

杰克逊抛出一个奇怪的例外,我不知道如何解决.我正在使用Spring,Hibernate和Jackson.

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

@JsonIgnoreProperties({ "sentMessages", "receivedMessages", "educationFacility" })
public class Director extends UserAccount implements EducationFacilityUser {
   ....
}
Run Code Online (Sandbox Code Playgroud)

我也为所有其他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)
Run Code Online (Sandbox Code Playgroud)

有关如何获取更多信息以查看导致此问题的建议?谁知道怎么修它?

编辑:我发现代理对象上存在getHander()和其他get*()方法.GRR!有什么办法我可以告诉杰克逊不要在代理上处理任何事情,或者我是谁?这真的很奇怪,因为吐出JSON的方法只会在某些情况下崩溃,而不是一直崩溃.尽管如此,这是由于代理对象上的get*()方法.

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

java json hibernate spring-mvc jackson

61
推荐指数
7
解决办法
11万
查看次数

JSON序列化程序中的Lazy Loadng错误

我有这种@OneToOne Hibernate relationShip

public class Address implements Serializable {

    private String id;
    private String city;
    private String country;
//setter getters ommitted
}

public class Student implements Serializable {

    private String id;
    private String firstName;
    private String lastName;    
    private Address address;
}
Run Code Online (Sandbox Code Playgroud)

地址项目映射为LAZY.

现在我想使用获取用户及其地址

session.load(Student.class,id);
Run Code Online (Sandbox Code Playgroud)

在我的daoService中.

然后我从Spring MVC控制器返回JSON:

@RequestMapping(value="/getStudent.do",method=RequestMethod.POST)
    @ResponseBody
    public Student getStudent(@RequestParam("studentId") String id){
        Student student = daoService.getStudent(id);
        return student;
    }
Run Code Online (Sandbox Code Playgroud)

不幸的是,由于懒惰的clasees它没有工作,我失败了:

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 …
Run Code Online (Sandbox Code Playgroud)

spring json hibernate lazy-loading spring-mvc

4
推荐指数
2
解决办法
2万
查看次数

标签 统计

hibernate ×2

json ×2

spring-mvc ×2

jackson ×1

java ×1

lazy-loading ×1

spring ×1