我在JBoss AS 6中通过RestEasy使用JAX-RS。当我的JAX-RS资源返回一组项目时(例如通过List),RESTEasy总是使用名称collection
作为根元素。
E.g。
<collection>
<item>
<description>computer</description>
<price>2500</price>
</item>
<item>
<description>tv</description>
<price>1500</price>
</item>
</collection>
此XML由例如:
生成@Produces("application/xml")
@Path("xml")
@RequestScoped
public class MyResource {
@GET
@Path("myitems")
public List<Item> getMyItems() {
return ...
}
}
可以看出,RESTEasy创建的根标记始终为<collection>
。
另一方面,泽西岛总是创建一个名称,该名称是列表中包含的元素的复数形式:
<items>
<item>
<description>computer</description>
<price>2500</price>
</item>
<item>
<description>tv</description>
<price>1500</price>
</item>
</items>
我知道可以创建一个包装器类型并返回而不是List,但这是一个相当精细的解决方法,并使代码更复杂。
是否可以轻松指定集合的根标签名称?
答案 0 :(得分:9)
似乎是RTFM的案例:RestEasy docs - Arrays and Collections of JAXB Objects
所以,如果我们想输出这个XML
<foo:list xmlns:foo="http://foo.org"> <customer><name>bill</name></customer> <customer><name>monica</name></customer> </foo:list>
我们会使用@Wrapped注释 如下:
@GET @Path("list") @Produces("application/xml") @Wrapped(element="list", namespace="http://foo.org", prefix="foo") public List<Customer> getCustomerSet() { ... }
因此可以通过 @Wrapped 注释。这是一个RESTEasy特定的,但现在这样做。
让问题保持开放以防万一有人拥有更好的解决方案(仍然在寻找一个让RESTEasy能够做泽西所做的全局拦截器orso。)