1

我在 Jersey Web 服务资源中有一个方法,它返回对象的 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>

谢谢

4

1 回答 1

3

您可以@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

于 2012-08-21T20:29:13.653 回答