java - 有没有办法设置 Jersey 资源返回的 ArrayList 的名称

标签 java rest jersey

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

相关文章:

java - 创建文本文件,tar 文件并将其放入输入流中?

java - 在 Android 中发送多部分/表单数据请求

java - 使用 BouncyCaSTLe java API 进行 PGP 签名并使用 gpg4win 进行验证不起作用

java - Android 文件访问问题

java - 为什么编译器不推断泛型中的捕获关系?

javascript - 使用 Javascript、HTML5 的跨域 REST 代理

rest - 如果资源正在使用且无法删除,请更正 Delete API 的 HTTP 响应代码

java - Maven 部署 : A message body writer for Java class java. lang.String (...) 未找到

java - jersey/tomcat 说明源服务器未找到目标资源的当前表示

java - 事务如何与多个持久性单元一起工作