用Jackson序列化时解决循环引用:双向

时间:2014-12-15 15:13:44

标签: java json hibernate serialization jackson

我遇到两个对象之间存在循环引用的情况,并且在使用jackson序列化任何对象时会导致错误。以下是示例情况:

Class A {
    private B b;
}
Class B {
    private A a;
}

杰克逊以@JsonManagedReference@JsonBackReference注释的形式为这种情况提供了解决方案。虽然该解决方案非常适用于需要在结果json中仅引用另一个类中的一个类的情况。例如,以下代码有效:

Class A {
    @JsonManagedReference
    private B b;
}
Class B {
    @JsonBackReference
    private A a;
}

尝试序列化A时会引用B。

我希望反面也是正确的。当我序列化A时,我想要字段b,当我序列化时,我想要字段a。这就是我尝试过的。

Class A {
    @JsonManagedReference("abc")
    @JsonBackReference("xyz")
    private B b;
}
Class B {
    @JsonBackReference("abc")
    @JsonManagedReference("xyz")
    private A a;
}

这不起作用。如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

从版本Jackson开始,2.0为此问题提供了解决方案。

引入了

@JsonIdentityInfo注释以解决此问题。