Spring MVC + Hibernate&Jackson =无法编写JSON:无限递归

use*_*152 1 java spring json hibernate

我知道这已被问过很多次了,解决方案非常明显,但在我的情况下它并没有真正起作用,我无法弄清楚如何解决它.

问题:Could not write JSON: Infinite recursion (StackOverflowError)

设置如下:

员工属于部门.(ManyToOne)部门有一名员工担任经理.(OneToOne)

我不想在部门中有一个@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
}
Run Code Online (Sandbox Code Playgroud)

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
}
Run Code Online (Sandbox Code Playgroud)

AbstractEntity.java

@MappedSuperclass
public class AbstractEntity implements Serializable {

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

}
Run Code Online (Sandbox Code Playgroud)

我尝试了两种解决方案:

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

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

如何在不修改模型类的情况下解决这个问题呢?

非常感谢 :)

RP-*_*RP- 5

@JsonBackReference不会被序列化.如果可能的话尝试使用@JsonIdentityInfoover @JsonManagedReference@JsonBackReference.请点击此链接获取文档.

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