Jackson JSON 序列化,通过级别定义避免递归

2022-09-01 06:52:16

我使用 Jackson 库将我的 pojo 对象序列化为表示形式。例如,我有类A和类B:JSON

class A {
  private int id;
  private B b;

  constructors...
  getters and setters
}

class B {
  private int ind;
  private A a;

  constructors...
  getters and setters
}

如果我想序列化类A中的对象,那么在序列化时有一定的可能性获得递归。我知道我可以通过使用来阻止它。@JsonIgnore

是否可以按深度级别限制序列化?

例如,如果级别为 2,则序列化将按以下方式进行:

  • 序列化 a,级别 = 0(0 < 2 正常)- >序列化
  • 序列化 a.b,级别 =1(1 < 2 正常)->序列化
  • 序列化 a.b.a,级别 = 2(2 < 2 不真实)->停止

提前致谢。


答案 1

我最近遇到了一个类似的问题:Jackson - 具有双义关系的实体的序列化(避免循环)

因此,解决方案是升级到 Jackson 2.0,并向类中添加以下注释:

@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, 
                  property = "@id")
public class SomeEntityClass ...

这很完美。


答案 2

检查以下链接,它可能会有所帮助:

之后的唯一选择是创建自己的自定义模块,用于对象类型的序列化/反序列化。请参阅此处:

问候。