在我的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重命名属性,但在这种情况下没有属性,所以不确定如何继续。
答案 0 :(得分:2)
您可以设置一个属性来覆盖默认值&#34;值&#34;用于MOXy的JSON编组。此属性是根据上下文设置的(或者可以根据Marshaller设置)而不是按照映射设置,因此&#34; myValueWrapper&#34;现在将使用而不是默认的&#34;值&#34;适用于所有需要的映射。
Map<String, Object> props = new HashMap<String, Object>();
props.put(JAXBContextProperties.JSON_VALUE_WRAPPER, "myValueWrapper");
JAXBContext context = JAXBContext.newInstance(myClasses, props);
或者,您可以通过创建使用可指定不同行为的外部绑定文件的不同JAXBContex来基于每个属性处理此问题。为XML创建一个绑定文件,将名称视为具有@XmlValue批注,并为JSON创建一个绑定文件,该文件将名称视为具有@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);