有没有办法将名称设置为Jersey资源返回的ArrayList

时间:2012-08-21 20:15:12

标签: java rest jersey

我在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>

之类的内容

由于

1 个答案:

答案 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

相关问题