我知道这个问题已经被问过很多次了,解决方案非常明显,但是就我而言,它实际上并没有用,而且我不知道该如何解决。
问题:Could not write JSON: Infinite recursion (StackOverflowError)
设置是这样的:
员工属于部门。 (多对一)
部门有一名员工担任经理。 (一对一)
我不想部门中有一个@OneToMany列表,因此缺少所有者。
员工有部门对象,但这是它所属的部门,而不是他管理的部门。
Employee.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
}
部门.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
}
抽象实体
@MappedSuperclass
public class AbstractEntity implements Serializable {
@Id
@GeneratedValue()
private Long id;
... getters and setters
}
我已经尝试了两种解决方案:
@JsonBackReference + @JsonManagedReference
我摆脱了StackOverflow,但是Department.manager没有序列化(@JsonBackReference),也没有在响应中发送,这很糟糕。
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class,property =“ @ emp_id”),似乎什么也没做,而StackOverflow却丢在我的脸上了:(
我希望如何解决此问题,而无需修改模型类?
非常感谢 :)
最佳答案
@JsonBackReference
不会被序列化。
如果可能,请尝试在@JsonIdentityInfo
和@JsonManagedReference
上使用@JsonBackReference
。请遵循this link以获得文档。
如果您不需要在过程中进一步维护关系,也可以尝试使用@JsonIgnore
。