我在Jersey Web Service Resource中有一个方法,它返回一个对象的ArrayList
@GET
@Path("/GetMyObjects")
public List<MyObjectDTO> getMyObject() {
List<MyObjectDTO> myObjects = new ArrayList<MyObjectDTO>();
// ... fill the list ...
return myObects;
}
这有效,但当 ACCEPT 标头设置为 application / xml 时,表示ArrayList的根XML对象为<myObjectDTOes>
。我猜测框架通过反映参数化类型来命名列表,并应用一些基本的语法规则使其复数。我的问题是如何将其覆盖为<myObjectList>
由于
答案 0 :(得分:3)
您可以在POJO上使用@XmlRootElement(name="yourName")
来命名Jersey响应中返回的XML元素。
根据第一条评论进行更新
据我所知,使用Jersey + JAXB解决此问题的最佳方法是定义一个包装类,听起来像是不必要的重复:
@XmlRootElement(name="yourName")
class JaxbCollectionWrapper<T> {
private Collection<T> objects;
@XmlElement(name="singleObjectName")
public Collection<T> getObjects() {/* BLAH */}
}
另请注意,@XmlElementWrapper
不能与泽西岛一起使用。
如果你正在使用RESTEasy,有一个可以提供你想要的直接解决方案; @Wrapped
,其中描述了here。