尝试序列化具有懒惰类型的实体

时间:2019-01-11 08:58:42

标签: java json spring-boot jackson

对于引用过多其他实体的实体,我一直在努力工作数小时(甚至不是几天),因此我决定用LAZY注释对实体进行注释,以提高性能。

使用LAZY fetch类型注释时,我在获取json数据时会遇到此异常

No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer

在堆栈跟踪的某个地方,我也发现了此错误

(to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) ); nested exception is com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class 

我已经在Google上进行了搜索,并尝试通过在实体上添加此异常来禁用该异常,并使用以下方法序列化以获取json,但不幸的是,尝试后无法获取json

@JsonIgnoreProperties({"hibernateLazyInitializer","userId"})
class Books{
//here is the relationship
@ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "userId")
    private User userId;

此外,我尝试使用application.properties禁用该异常,但是在以下配置下,该异常仍然存在

spring.jackson.serialization.eager-serializer-fetch=true
spring.jackson.serialization.fail-on-empty-beans=false
spring.jackson.serialization.fail-on-self-references=false
spring.jackson.serialization.fail-on-unwrapped-type-identifiers=false

请提供一种方法,可以在ApplicationStartUp.java文件中配置和处理此异常。 请有人帮我摆脱困境

1 个答案:

答案 0 :(得分:0)

看来您的问题有很多解决方案...您可以查看此link来查看它们...

通常,我会推荐DTO方法,但有时该解决方案意味着代码中的许多更改...

正如我在您的问题中看到的那样,您正在使用注释方法...如果我理解我提供的链接中提出的解决方案,则:

  

@JsonIgnoreProperties({“ hibernateLazyInitializer”,“ handler”})

应将其放在您的User实体中,而不要放在您的Book实体中! (尝试一下,但是在删除杰克逊属性之前,请先恢复弹簧配置)

希望获得帮助...