使用保留下划线的 xjb 覆盖 JAXB 属性名称

2024-02-01

自定义 xjb 非常适合根据需要覆盖名称,但是我们会丢失名称中的下划线。

<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings 
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
  version="2.1">
  <jxb:globalBindings underscoreBinding="asCharInWord"/>
   <jxb:bindings schemaLocation="foo.xsd">
        <jxb:bindings node="//xs:complexType[@name='fooType']">
            <jxb:property name="value" />
        </jxb:bindings>
  </jxb:bindings>
</jxb:bindings>

正如您所看到的,对于上面的 xjb,生成的 java 代码是

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "textType", propOrder = {
"value"
})
public class FooType {

@XmlMixed
@XmlAnyElement(lax = true)
protected List<Object> value;
......
 public List<Object> getValue() {
    if (value == null) {
        value = new ArrayList<Object>();
    }
    return this.value;
}

现在,一旦我将上面的 xjb 中的一行更改为:

 <jxb:property name="_value" />

java 代码中的所有更改是:

public List<Object> get_Value() {
    if (value == null) {
        value = new ArrayList<Object>();
    }
    return this.value;
}

观察到的:"value"

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "textType", propOrder = {
"value"
})

期望:"_value"

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "textType", propOrder = {
"_value"
})

下列propOrder很好,因为@XmlAccessorType(XmlAccessType.FIELD)已指定且字段名称为value即使该属性称为 _Value (请参阅:http://blog.bdoughan.com/2012/02/jaxbs-xmltype-and-proporder.html http://blog.bdoughan.com/2012/02/jaxbs-xmltype-and-proporder.html).

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "textType", propOrder = {
"value"
})

目标是让“value”在我的 json 中显示为“_value”

你的特殊_Value财产似乎能够容纳任何东西。您希望如何将内容呈现为 JSON?

@XmlMixed
@XmlAnyElement(lax = true)
protected List<Object> value;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用保留下划线的 xjb 覆盖 JAXB 属性名称 的相关文章

随机推荐