5

我有以下 2 个带有循环引用的类,为方便起见,我没有放置 getter 和 setter

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "i")
public class A{
    int i;
    B b1;
    B b2;
}

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "i")
public class B {
    int i;
    AI a;
}

如果 A.b1 和 A.b2 引用相同的 B 对象,我得到序列化的 json 如下:

 {
  "i": 1,
  "b1": {
    "i": 2,
    "a": 1
  },
  "b2": 2
}

但我的预期结果是:

 {
  "i": 1,
  "b1": {
    "i": 2,
    "a": 1
  },
  "b2": {
    "i": 2,
    "a": 1
  }
}

我检查了杰克逊的源代码看起来像杰克逊存储以前使用的对象的 id/reference,如果任何其他对象使用相同的引用,它将使用 id 而不是序列化整个对象,如果对象保持在同一个循环链中,那很好,但是如果他们不会留在同一个链中,就像我的示例显示的那样很奇怪。

任何人都可以通过 @identityinfo 注释帮助获得我的预期结果?

4

0 回答 0