1

我正在使用 JAX-RS / JAXB 和 JPA 创建 REST Web 服务。

@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public List<MyObject> getList() {
    List<MyObject> resultList = em.createNamedQuery(
            "MyObject.findAll").getResultList();
    return resultList;
}

返回

{
    "MYObject": [
        {
            "attribute": "value"
        },
        {
            "attribute": "value"
        }
    ]
}

对于 xml:

    <mYObject>
      <MObject>
        <attribute>value</attribute>
      </MyObject>
      <MyObject>
        <attribute>value</attribute>
      </MyObject>
    </mYObject>

我怎样才能摆脱包装元素?好的,xml 需要一个根元素 (mYObject) 但我该如何重命名它?JSON 是否有可能有这样的输出:

   [
        {
            "attribute": "value"
        },
        {
            "attribute": "value"
        }
    ]

==> 没有 Wrapper 对象,只有包含所有对象的普通数组?

4

3 回答 3

0

不知道如果我说对了。但我猜你想要:

  1. 重命名我的对象
  2. 摆脱 MyObject

对于问题 1,

-- 您可以使用 @XmlRootElement(name="NOTmYObject") 将其覆盖为 NOTmYObject。

对于问题 2,

-- 如果您希望 POJO 中的数据结构与 HTTP 中的 json 不同,JaxB 不会假设这种灵活性。JaxB 严格地将其视为数据结构,就像服务和客户端之间的合同一样。使用 xsd 文件来定义这个合同更加困难。或者,如果您真的需要这种灵活性,您可能想看看jackson

于 2013-02-04T08:00:48.257 回答
0

我决定继续使用默认的 List-marshaling。

但是,如果要归档自定义编组和命名,则必须编写自己的MessageBodyReaderMessageBodyWriter

于 2013-06-29T08:59:03.900 回答
-1

使用@XmlValueinMyObject来注释attribute.

于 2013-02-01T15:52:02.453 回答