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 正确忽略。
我有以下 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 正确忽略。