Имя корневого элемента в коллекциях, возвращаемых RESTEasy - PullRequest
15 голосов
/ 31 мая 2011

Я использую JAX-RS через RestEasy в JBoss AS 6. Когда мой ресурс JAX-RS возвращает коллекцию элементов (например, через Список), 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>.

С другой стороны, Джерси всегда создает имя, являющееся формой множественного числа элемента, содержащегося в списке:

<items>    
   <item>
     <description>computer</description>
     <price>2500</price>
   </item>

   <item>
     <description>tv</description>
     <price>1500</price>
   </item>
</items>

Я знаю, что можно создать тип оболочки и вернуть его вместосписка, но это довольно сложный обходной путь и делает код более сложным.

Можно ли легко указать имя корневого тега для коллекций?

1 Ответ

9 голосов
/ 01 июня 2011

Оказалось, что это случай RTFM: Документы RestEasy - Массивы и коллекции объектов 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 делать то же, что и Джерси).

...