我正在使用JAX RS使用通常的 @Path, @GET, @Produces({"application/json, "application/xml"})
创建REST Web服务 .
我正在返回一个POJO作为响应,它根据请求的类型以JSON或XML的形式发送 . 它工作正常,直到我与另一个实体添加了 Many-To-Many 关系 . 这种关系是双向的 .
我正在使用 JBoss AS 7 . 我添加了 Jackson 的 @JsonManagedReference
和 @JsonBackReference
,但无济于事 .
怎么克服这个?
我像这样部署了我的JAX RS: -
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_3_0.xsd" version="3.0">
<servlet>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
我没有扩展任何Application类或使用任何JAXRS激活器类 .
这个JBoss的RESTEasy使用Jackson作为他们的JSON提供者,甚至为什么它不能识别 @JsonManagedReference
注释?
我是否必须更新依赖项,如果是,那么如何?如果请求是XML的,如何修复它,它也在JAXB中的循环引用中失败 .
提前致谢!
1 回答
Note: 我是EclipseLink JAXB (MOXy)领导,是JAXB (JSR-222)专家组的成员 .
MOXy 提供了
@XmlInverseReference
扩展,可用于支持XML和JSON绑定中的双向关系 .JAVA MODEL
Customer
Customer
有PhoneNumber
个对象的集合 .PhoneNumber
每个
PhoneNumber
对象都维护一个指向Customer
对象的后向指针 . 此属性注释为@XmlInverseReference
.jaxb.properties
要将MOXy用作JAXB提供程序,您需要在与域模型相同的包中包含一个名为
jaxb.properties
的文件,并带有以下条目(请参阅:http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html):INPUT
以下是我们将在此示例中解组的文档
input.xml
input.json
DEMO
OUTPUT
以下是运行演示代码的输出 . 如您所见,
customer
属性填充在所有PhoneNumber
对象上 .FOR MORE INFORMATION
http://blog.bdoughan.com/2010/07/jpa-entities-to-xml-bidirectional.html
http://blog.bdoughan.com/2011/08/json-binding-with-eclipselink-moxy.html
http://blog.bdoughan.com/2012/05/moxy-as-your-jax-rs-json-provider.html
http://blog.bdoughan.com/2011/08/binding-to-json-xml-geocode-example.html