java - 尝试序列化具有惰性获取类型的实体

标签 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 

我已经用谷歌搜索并尝试通过在实体中添加此内容并序列化以使用以下内容获取 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/

相关文章:

java - 显示 JTabbedPane 的第一个选项卡

java - 为什么我的 hibernate 关系不起作用?

java - Java有指针吗?

json - 如何过滤 UITableView 中显示的信息类型 | swift JSON

java - 无法使用 Spring Data REST 捕获 DataIntegrityViolationException

java - 按顺序组织/插入日期的算法

ios - 从NSDictionary检索 key

javascript - 如何显示 JSON 对象的 ID 和子对象?

java - 在 Spring Boot 2.0.3 中从 build.gradle 传递 JVM 参数

spring-boot - 如何在 Spring Boot 响应控件中删除对象的某些字段?