使用 Eclipselink Moxy 如何将 xml 内容映射到与值不同的名称?

2023-12-19

在我的 Xml 中我有:

<alias-list>
   <alias sort-name="Afghan">Afghany</alias>
</alias-list>

json 输出为

"aliases" [ {
   "sort-name" : "Afghan",
   value : "Afghany"
} ]

但我希望它是:

"aliases" [ {
   "sort-name" : "Afghan",
   name : "Afghany"
} ]

所以我知道如何使用 oxml.xml 重命名属性,但在这种情况下没有属性,因此不确定如何继续。


您可以设置一个属性来覆盖 MOXy 的 JSON 编组的默认“值”。此属性是按上下文设置(或可以按 Marshaller 设置)而不是按映射设置,因此现在将使用“myValueWrapper”而不是需要的所有映射的默认“值”。

Map<String, Object> props = new HashMap<String, Object>();
props.put(JAXBContextProperties.JSON_VALUE_WRAPPER, "myValueWrapper");
JAXBContext context = JAXBContext.newInstance(myClasses, props);

或者,您可以通过创建不同的 JAXBContext,使用可以指定不同行为的外部绑定文件,在每个属性的基础上处理此问题。为 XML 创建一个绑定文件,将 name 视为具有 @XmlValue 注释,并为 JSON 创建一个绑定文件,将 name 视为具有 @XmlElement 注释。

示例 xmlbindings.xml

<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm" package-name="mypackage.test">
    <java-types>
       <java-type name="Alias">
          <java-attributes>
             <xml-value java-attribute="name"/>
          </java-attributes>
        </java-type>
    </java-types>
</xml-bindings>

示例 jsonbindings.xml

<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm" package-name="mypackage.test">
    <java-types>
       <java-type name="Alias">
          <java-attributes>
             <xml-element java-attribute="name" name="name"/>
          </java-attributes>
        </java-type>
    </java-types>
</xml-bindings>

要使用绑定文件创建 JAXBContext,请执行以下操作:

Map<String, Object> props = new HashMap<String, Object>();
StreamSource ss = new StreamSource(new File("pathtobindings/xmlbindings.xml"));    props.put(JAXBContextProperties.OXM_METADATA_SOURCE, ss);
JAXBContext contextWithXMLBindings = JAXBContext.newInstance(myClasses, props);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Eclipselink Moxy 如何将 xml 内容映射到与值不同的名称? 的相关文章

随机推荐