在一个引用了太多其他实体的实体上,我已经为这个异常苦苦挣扎了几个小时甚至几天,我决定使用 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
我已经用谷歌搜索并尝试通过在实体中添加此内容并序列化以使用以下内容获取 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 文件中配置和处理此异常。 请有人帮助我走出黑暗
最佳答案
看来你的问题有很多解决方案...你可以查看这个link去看他们...
通常情况下,我会推荐 DTO 方法,但有时该解决方案意味着代码中的许多更改......
正如我在您的问题中看到的,您正在遵循注释方法...如果我理解我提供的链接中提出的解决方案,则:
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
应该将其放在您的 User
实体中,而不是您的 Book
实体中! (试试这个,但通过删除 Jackson 属性来恢复之前的 Spring 配置)
希望这有帮助......
关于java - 尝试序列化具有惰性获取类型的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54143207/