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

Gor*_*tov 30 java serialization json jackson

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

class A {
  private int id;
  private B b;

  constructors...
  getters and setters
}

class B {
  private int ind;
  private A a;

  constructors...
  getters and setters
}
Run Code Online (Sandbox Code Playgroud)

如果我想序列化来自A类的对象,则在序列化时有可能获得递归.我知道我可以通过使用来阻止它@JsonIgnore.

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

例如,如果级别为2,则序列化将采用以下方式:

  • 序列化a,level = 0(0 <2 ok) - >序列化
  • 序列化ab,level = 1(1 <2 ok) - >序列化
  • 序列化aba,level = 2(2 <2不是真的) - >停止

提前致谢.

Eug*_*sky 22

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

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

@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, 
                  property = "@id")
public class SomeEntityClass ...
Run Code Online (Sandbox Code Playgroud)

这非常有效.

  • 这是非常好的方式.但是你知道一种限制图表深度的方法吗? (10认同)

Far*_*rid 13

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

之后唯一的选择是为您的对象类型创建自己的自定义模块以进行序列化/反序列化.看这里:

问候.