返回List时没有包装元素

时间:2013-02-01 14:20:26

标签: java-ee jaxb jackson jax-rs

我正在使用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 2有可能有这样的输出:

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

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

3 个答案:

答案 0 :(得分:0)

如果我找对你,不知道。但我想你想要:

  1. 重命名mYObject
  2. 摆脱MyObject
  3. 问题1,

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

    问题2,

    - 如果您希望POJO中的数据结构与HTTP中的json不同,则JaxB不会假设这种灵活性。 JaxB对待它,数据结构,严格地说就像服务和客户之间的契约。使用xsd文件来定义这个合同是更加紧张的前进。或者,如果您确实需要灵活性,您可能需要查看 jackson

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

使用MyObject中的@XmlValue注释attribute