我想用JAXB将我的pojo转换为json,我的pojo有一对多的关系,当我将我的pojo转换为json时,JAXB会生成错误“在对象图中检测到一个循环。这将导致无限深的XML ”
我从网上读到,这个问题可以在@XmlID和@XmlIDREF的帮助下解决,但是有一个问题,我的Id属性不是String类型而是Long。据我所知,@ XmlID只能用于String属性。
其他网站建议使用eclipselink MOXy,但MOXy无法生成json。
答案 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中添加杰克逊软件包。