关于java:使用Jackson序列化时解决循环引用:双向

Resolving Circular Reference While Serializing with Jackson: Bidirectional

我有一种情况,在两个对象之间存在循环引用,这会导致在使用Jackson序列化任何对象时出错。以下是示例情况:

1
2
3
4
5
6
Class A {
    private B b;
}
Class B {
    private A a;
}

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

1
2
3
4
5
6
7
8
Class A {
    @JsonManagedReference
    private B b;
}
Class B {
    @JsonBackReference
    private A a;
}

在试图序列化a时,它将具有b的引用。

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

1
2
3
4
5
6
7
8
9
10
Class A {
    @JsonManagedReference("abc")
    @JsonBackReference("xyz")
    private B b;
}
Class B {
    @JsonBackReference("abc")
    @JsonManagedReference("xyz")
    private A a;
}

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


从EDOCX1版开始,为这个问题提供了一个解决办法。

介绍了注释以照顾这一问题。