Jakarta ee 返回列表时没有包装器元素
我正在使用JAX-RS/JAXB和JPA创建REST Web服务Jakarta ee 返回列表时没有包装器元素,jakarta-ee,jaxb,jackson,jax-rs,Jakarta 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").getResultLis
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public List<MyObject> getList() {
List<MyObject> resultList = em.createNamedQuery(
"MyObject.findAll").getResultList();
return resultList;
}
对于xml:
<mYObject>
<MObject>
<attribute>value</attribute>
</MyObject>
<MyObject>
<attribute>value</attribute>
</MyObject>
</mYObject>
==>没有包装器对象,只有包含所有对象的普通数组?在
MyObject
中使用来注释属性如果我没弄错的话,我不知道。但我想你想要:
重命名mYObject
除掉我的对象
关于问题1
--您可以使用@XmlRootElement(name=“NOTmYObject”)将其重写为NOTmYObject
关于问题2
--如果您希望POJO中的数据结构不同于HTTP中的json,JaxB不会假定这种灵活性。JaxB严格地将数据结构视为服务和客户机之间的契约。使用xsd文件来定义此契约更具前瞻性。或者,如果你真的需要这种灵活性,你可能想看看杰克逊 我决定继续使用默认列表封送
但是,如果您想归档自定义封送和命名,您必须在。。。什么?例如,哪个容器。我不能在类上使用@XmlValue注释。属性
是MyObject
类的属性,不是类谢谢:)1)不起作用,它重命名每个元素的标记“MyObject”。但不是外部的“wrapper-/ListTag”元素“mYObjects”。对于2):我并不希望POJO结构有所不同——我返回一个对象的ArrayList,所以我希望数组中包含对象。而且不是一个包含对象数组的对象……1)没有简单的解决方案来指定包装标签。使用“@Provider”检查解决方案。2) 这就是JaxRS处理列表编组的方式,您可以使用“@Provider”指定自己的方法。
<mYObject>
<MObject>
<attribute>value</attribute>
</MyObject>
<MyObject>
<attribute>value</attribute>
</MyObject>
</mYObject>
[
{
"attribute": "value"
},
{
"attribute": "value"
}
]