Джерси против RestEasy - изменение имени корневого элемента коллекции JAX-RS XML - PullRequest
1 голос
/ 03 октября 2019

У меня есть следующая конечная точка Jax-RS:

@XmlRootElement(name = "foobar")
public class Foobar {}

@GET
@Produces(MediaType.APPLICATION_XML)
public Object getFoobars() {
    return new GenericEntity<List<FooBar>>(service.getFooBars());
}

Используя Jersey 1.x, он возвращал:

<foobars>
  <foobar>...</foobar>
  <foobar>...</foobar>
</foobars>

Теперь, когда я использую RestEasy, онвозвращает:

<collection>
  <foobar>...</foobar>
  <foobar>...</foobar>
</collection>

Как я могу контролировать корневое имя возвращенного GenericEntity<List<X>> в Jax-RS (используя Rest-Easy)?

Обратите внимание, что я также возвращаю формат Json, и мне нужно, чтобы API был обратно совместим (например, корневой элемент является массивом в Json и должен оставаться прежним)

1 Ответ

1 голос
/ 03 октября 2019

Нашел решение сам, немного покопавшись в исходном коде RestEasy. Вам просто нужно добавить аннотацию @Wrapped(element="___") к методу:

import org.jboss.resteasy.annotations.providers.jaxb.Wrapped;

@GET
@Produces(MediaType.APPLICATION_XML)
@Wrapped(element = "foobars")
public Object getFoobars() {
    return new GenericEntity<List<FooBar>>(service.getFooBars());
}

Работает правильно для XML и правильно игнорируется для JSON.

...