我在 Jersey Web 服务资源中有一个方法返回对象的 ArrayList
@GET
@Path("/GetMyObjects")
public List<MyObjectDTO> getMyObject() {
List<MyObjectDTO> myObjects = new ArrayList<MyObjectDTO>();
// ... fill the list ...
return myObects;
}
这有效,但是当 ACCEPT header 设置为 application/xml 时,代表 ArrayList 的根 XML 对象是 <myObjectDTOes>
.我猜测框架通过参数化类型的反射来命名列表,并应用一些基本语法规则使其成为复数。我的问题是如何将其覆盖为类似 <myObjectList>
的内容
谢谢
最佳答案
您可以使用 @XmlRootElement(name="yourName")
在您的 POJO 上命名 Jersey 响应中返回的 XML 元素。
根据第一条评论更新
据我所知,使用 Jersey + JAXB 解决此问题的最佳方法是定义一个包装类,这听起来像是不必要的重复:
@XmlRootElement(name="yourName")
class JaxbCollectionWrapper<T> {
private Collection<T> objects;
@XmlElement(name="singleObjectName")
public Collection<T> getObjects() {/* BLAH */}
}
另请注意,@XmlElementWrapper
不能与 Jersey 一起使用。
如果您要使用 RESTEasy,那么有一个直接的解决方案可以满足您的需求; @Wrapped
描述here .
关于java - 有没有办法设置 Jersey 资源返回的 ArrayList 的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12062354/