JAXB在对象图中检测到循环

时间:2011-02-09 11:53:59

标签: json jaxb

我想用JAXB将我的pojo转换为json,我的pojo有一对多的关系,当我将我的pojo转换为json时,JAXB会生成错误“在对象图中检测到一个循环。这将导致无限深的XML ”

我从网上读到,这个问题可以在@XmlID和@XmlIDREF的帮助下解决,但是有一个问题,我的Id属性不是String类型而是Long。据我所知,@ XmlID只能用于String属性。

其他网站建议使用eclipselink MOXy,但MOXy无法生成json。

4 个答案:

答案 0 :(得分:3)

正如您在问题中提到的EclipseLink MOXy(我是技术主管)有@XmlInverseReference注释来解决双向关系问题。从EclipseLink 2.4开始,MOXy可以生成/使用JSON。

了解更多信息

答案 1 :(得分:1)

您的定义中存在循环引用问题。

尝试将@XmlTransient置于有问题的定义之上。

另外,关于XmlID和字符串类型,请参阅http://markmail.org/message/up6vrzjixxrvy5th

答案 2 :(得分:0)

JAXB规范要求使用@XmlID标记的属性为String属性。 MOXy impl允许使用long。

继续使用完全符合JAXB的实现的一个方法是在String字段中复制你的id(在序列化之前)

不太了解JAXB,但XStream使您能够使用不同的模式,其中一些模式将提供对xml中元素的xpath地址(绝对或相对)的引用,如果这些元素已经显示。 (你可以用XStream做Json)

答案 3 :(得分:0)

当我想用JaxRS将POJO转换为JSON时,我遇到了类似的问题。 MoxyJsonProvider是eclipselink的默认选项,但是它无法解析 JSOG (JSON结构中存在循环)。 Jackson Jaxb Provider 使用ObjectMapper可以做到更好。

我在下面的答案中详细说明了如何调用Jackson Provider而不是Moxy。您将需要在pom xml中添加杰克逊软件包。

https://stackoverflow.com/a/60319306/5076414