Spring Jackson序列化无限递归

时间:2017-02-21 06:01:01

标签: spring serialization jackson

我有一个Spring REST服务,其API控制器返回一个对象A。我得到以下例外:

Could not write content: Infinite recursion (StackOverflowError) (through reference chain: com.company.product.platform.service.contract.A[\"b\"]->com.company.product.data.B[\"c\"]);

以下是对象定义

public class A {
  private final B b;
  private final DateTime time;
  private final String s;
  private final long l;
}

BCD是第三方库的一部分。

public class B{
  private final C c;
}

public class C implements Iterable<D>{
  private final Map<String, D> props;
}

我不太明白为什么我会遇到无限循环。非常感谢解释/解决方案。

更新

我通过进行一些修改使序列化工作。以下是我所做的解释:

B成为A成员的唯一原因是我可以访问作为C成员的道具地图。因此,我创建了道具地图的副本,并使其成为A的成员。 A现在看起来像:

public class A {
      private final Map<String, D> props;
      private final DateTime time;
      private final String s;
      private final long l;
    }

这很好用。我觉得这会把问题缩小到B或C.当它实现Iterable时,C似乎更有趣。序列化实现Iterable的类是否有问题?

0 个答案:

没有答案