gpt4 book ai didi

java - Spring MVC + Hibernate & Jackson = 无法写入 JSON : Infinite recursion

转载 作者:行者123 更新时间:2023-11-29 07:48:48 25 4
gpt4 key购买 nike

我知道这个问题已经被问过很多次了,解决方案也很明显,但在我的情况下它并没有真正起作用,我不知道如何解决它。

问题:无法写入 JSON:无限递归(StackOverflowError)

设置是这样的:

员工属于一个部门。 (多对一)部门有一名员工担任经理。 (一对一)

我不想在 Department 中有一个 @OneToMany 列表,所以缺少拥有方。员工有一个部门对象,但这是它所属的部门,而不是他管理的部门。

员工.java

@Entity
@Table(name = "ts_employee")
//@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class,property="@emp_id")
public class Employee extends AbstractEntity {

@ManyToOne
@JoinColumn(name = "dept_id")
@JsonManagedReference
private Department department;

... getters and setters
}

Department.java

@Entity
@Table(name = "ts_department")
//@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@dept_id")
public class Department extends AbstractEntity {

@OneToOne
@JoinColumn (name = "manager_id")
@JsonBackReference
private Employee manager;

.. other fields.. getters and setters
}

AbstractEntity.java

@MappedSuperclass
public class AbstractEntity implements Serializable {

@Id
@GeneratedValue()
private Long id;
... getters and setters

}

两种解决方案我都试过了:

  1. @JsonBackReference + @JsonManagedReference我摆脱了 StackOverflow,但 Department.manager 没有序列化 (@JsonBackReference),也没有在响应中发送,这很糟糕。

  2. @JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@emp_id"),它似乎没有做任何事情,StackOverflow 被扔到我面前:(

我该如何解决这个问题,最好不要修改模型类?

非常感谢:)

最佳答案

@JsonBackReference 不会被序列化。如果可能,请尝试使用 @JsonIdentityInfo 而不是 @JsonManagedReference@JsonBackReference。关注this link用于文档。

如果您不需要在此过程中进一步维护关系,您也可以尝试使用@JsonIgnore

关于java - Spring MVC + Hibernate & Jackson = 无法写入 JSON : Infinite recursion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23071841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com