Jaxb 使用XmlElementWrapper时编组集合

Jaxb 使用XmlElementWrapper时编组集合,jaxb,moxy,Jaxb,Moxy,我的类上有一个集合,它使用@XmlElementWrapper将集合包装在一个额外的元素中 所以,我的班级看起来是这样的: class A { @XmlElement(name = "bee") @XmlElementWrapper public List<B> bees; } 我不想在那里有多余的“蜜蜂”钥匙 在进行编组时,是否可能让MOXy忽略XmlElement部分?因为我仍然需要名字是“蜜蜂”而不是“蜜蜂”,我不想两者兼而有之 我正在使用MOXy 2.4.1和j

我的类上有一个集合,它使用@XmlElementWrapper将集合包装在一个额外的元素中

所以,我的班级看起来是这样的:

class A {
  @XmlElement(name = "bee")
  @XmlElementWrapper
  public List<B> bees;
}
我不想在那里有多余的“蜜蜂”钥匙

在进行编组时,是否可能让MOXy忽略XmlElement部分?因为我仍然需要名字是“蜜蜂”而不是“蜜蜂”,我不想两者兼而有之


我正在使用MOXy 2.4.1和javax.persistence 2.0.0。

注意:我是专家组的负责人和成员

oxm.xml

您可以使用MOXy的外部映射文档为JSON绑定提供备用映射(请参阅:)


演示

在下面的演示代码中,我们将创建
JAXBContext
的两个实例。第一个是仅基于我们将用于XML的JAXB注释构建。第二个基于JAXB注释构建,并使用MOXy的外部映射文件覆盖
A
类上
bees
属性的映射

用于UM14002508的包;
导入java.util.*;
导入javax.xml.bind.*;
导入org.eclipse.persistence.jaxb.JAXBContextProperties;
公开课演示{
公共静态void main(字符串[]args)引发异常{
List=new ArrayList();
添加(新的B());
添加(新的B());
A=新的A();
a、 蜜蜂=蜜蜂;
jaxbcontextjc1=JAXBContext.newInstance(A.class);
Marshaller marshaller1=jc1.createMarshaller();
setProperty(Marshaller.JAXB_格式化的_输出,true);
元帅1.元帅(a,系统输出);
映射属性=新的HashMap(3);
put(JAXBContextProperties.OXM_元数据_源,“forum14002508/OXM.xml”);
put(JAXBContextProperties.MEDIA_类型,“application/json”);
put(JAXBContextProperties.JSON_INCLUDE_ROOT,false);
JAXBContext jc2=JAXBContext.newInstance(新类[]{A.Class},属性);
Marshaller marshaller2=jc2.createMarshaller();
setProperty(Marshaller.JAXB_格式化的_输出,true);
元帅2.元帅(a,系统输出);
}
}
输出

下面是运行与您的用例匹配的演示代码的输出

<a>
   <bees>
      <bee/>
      <bee/>
   </bees>
</a>
{
   "bees" : [ {
   }, {
   } ]
}

  • {
      "bees": {
        "bee": [
          ....
        ]
      }
    }
    
    <a>
       <bees>
          <bee/>
          <bee/>
       </bees>
    </a>
    {
       "bees" : [ {
       }, {
       } ]
    }