将嵌套对象序列化为JSON字符串时发生StackOverflowError

时间:2013-12-18 08:28:01

标签: json groovy

这是Groovy中的嵌套对象:

class A{
    B b
}

class B{
    A a
}

A a = new A()
B b = new B()
a.b = b
b.a = a

然后在调用new JsonBuilder(a).toString()时发生StackOverflowError。

我们是否有JsonBuilder的任何配置?或者这样做是不可能的。顺便说一句,嵌套对象来自Hibernate。

谢谢!

3 个答案:

答案 0 :(得分:1)

根据问题的描述,您似乎正在处理这样的数据:

DB(数据) - > YourApp(POJO) - >外部(JSON)

但是,从设计的角度来看,我认为公开内部数据库数据模型以供外部使用似乎不是正确的做法。由于许多原因,使用新模型进行序列化可能会更好:

  1. 安全。正如我上面提到的那样。
  2. 扩展。即使您使用的模型目前也是相同的,它们可能会在未来发生变化和变化。
  3. ,质朴。

答案 1 :(得分:0)

如果你在Hibernate中进行双向关系,你可以让对象保持对另一个(例如id)的引用,而不是引起这个问题的实际对象。

答案 2 :(得分:0)

根据给定的方案和您得到的错误,可以得出结论JsonBuilder无法处理循环引用在您的对象结构中 >)。我不确定您使用的是哪个库,但如果可用,您可以使用源代码进行交叉检查。

作为替代方案,我建议探索其他处理循环引用的库。查看Jackson已知的handle cyclic references