Java 8项目中如何固定XML序列化的属性名称(不受变量名影响)
解决方案:JAXB固定XML属性/元素名称(独立于Java变量名)
首先纠正一个误区:@XmlValue注解的作用是将Java字段映射为XML元素的文本内容,而非指定XML属性或元素的名称,所以你用它来指定名称肯定无效。要实现固定XML名称的需求,需要用@XmlElement(对应XML元素)或@XmlAttribute(对应XML属性)注解,具体看你要生成的是XML元素还是属性:
场景1:生成XML元素(值 )
直接在Java字段对应的getter方法(或字段本身)上添加@XmlElement(name = "mySpecifiName"),不管变量名是什么,序列化后都会用指定的名称:
import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class MyEntity { // 变量名随意定义,XML里会生成指定名称的元素 private String randomVarName; @XmlElement(name = "mySpecifiName") public String getRandomVarName() { return randomVarName; } public void setRandomVarName(String randomVarName) { this.randomVarName = randomVarName; } }
场景2:生成XML属性()
如果要生成的是XML节点的属性,就用@XmlAttribute(name = "mySpecifiName")注解:
import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class MyEntity { private String anyVarName; @XmlAttribute(name = "mySpecifiName") public String getAnyVarName() { return anyVarName; } public void setAnyVarName(String anyVarName) { this.anyVarName = anyVarName; } }
简化写法:直接在字段上标注
如果不想在getter方法上加注解,可以添加@XmlAccessorType(XmlAccessType.FIELD)指定字段级别的映射,直接在字段上标注注解:
import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class MyEntity { @XmlElement(name = "mySpecifiName") private String whateverVarName; // getter/setter 可正常保留,不影响XML生成逻辑 }
内容的提问来源于stack exchange,提问作者Alexei
相关产品推荐
相关产品推荐

