我正在使用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对象,只有包含所有对象的普通数组?
答案 0 :(得分:0)
问题1,
- 您可以使用@XmlRootElement(name =“NOTmYObject”)将其覆盖为NOTmYObject。
问题2,
- 如果您希望POJO中的数据结构与HTTP中的json不同,则JaxB不会假设这种灵活性。 JaxB对待它,数据结构,严格地说就像服务和客户之间的契约。使用xsd文件来定义这个合同是更加紧张的前进。或者,如果您确实需要灵活性,您可能需要查看 jackson 。
答案 1 :(得分:0)
我决定继续使用默认的List-marshaling。
但是,如果您要归档自定义封送和命名,则必须自己编写MessageBodyReader和MessageBodyWriter。
答案 2 :(得分:-1)
使用MyObject
中的@XmlValue
注释attribute
。