Имя корневого элемента в коллекциях, возвращаемых RESTEasy
Я использую 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>
Я знаю, что можно создать тип-оболочку и вернуть это вместо List, но это довольно сложное обходное решение и делает код более сложным.
Можно ли легко указать, какое имя корневого тега для коллекций?
Ответы
Ответ 1
Появился случай 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 делать то, что делает Джерси).