我知道这个问题已经被问过很多次了,解决方案非常明显,但是就我而言,它实际上并没有用,而且我不知道该如何解决。

问题: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

09-27 15:54