您可以设置一个属性来覆盖 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);
或者,您可以通过创建不同的 JAXBContexts 来处理每个属性的问题,这些 JAXBContexts 使用可以指定不同行为的外部绑定文件。为将 name 视为具有 @XmlValue 注释的 XML 创建一个绑定文件,并为将 name 视为具有 @XmlElement 注释的 JSON 创建一个绑定文件。
示例 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);