RESTEasy返回的集合中的根元素名称

问题描述

| 我正在JBoss AS 6中通过RestEasy使用JAX-RS。当我的JAX-RS资源返回项目集合(例如,通过List)时,RESTEasy始终将名称
collection
用作根元素。 例如。
<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>
。 另一方面,Jersey总是创建一个名称,该名称是列表中包含的元素的复数形式:
<items>    
   <item>
     <description>computer</description>
     <price>2500</price>
   </item>

   <item>
     <description>tv</description>
     <price>1500</price>
   </item>
</items>
我知道可以创建包装器类型并返回它而不是List,但这是一个相当复杂的解决方法,并使代码更加复杂。 是否可以轻松指定集合的​​根标签名称?     

解决方法

        似乎是RTFM的一种情况:RestEasy docs-JAXB对象的数组和集合   因此,如果我们要输出此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做Jersey的工作)。