Jersey vs RestEasy - JAX-RS XML 集合根元素名称更改

Jersey vs RestEasy - JAX-RS XML collection root element name change

我有以下 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,它曾经 return:

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

现在我使用 RestEasy,returns:

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

如何在 Jax-RS(使用 Rest-Easy)中控制 returned GenericEntity<List<X>>root 名称

请注意,我也是 return Json 格式,我需要保持 API 向后兼容(例如,根元素是一个数组Json 并且应该保持不变)

在深入了解 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 正确忽略。