@XmlElement用于控制Java字段/属性在XML序列化中的元素名、必需性、空值处理等行为,作用于字段或getter方法,优先级高于类级命名规则。
@XmlElement 是 JAXB 中最常用的注解之一
,用来控制 Java 字段或属性在 XML 序列化/反序列化时对应的**元素名、是否必需、默认值、是否 nillable** 等行为。它作用于字段(field)或 getter 方法(property),优先级高于类级别的默认命名规则。
默认情况下,JAXB 会把字段名直接转成 XML 元素名(首字母小写,驼峰转短横线规则不自动启用)。用 @XmlElement(name = "xxx") 可显式指定 XML 标签名。
public class Person {
@XmlElement(name = "full-name")
private String fullName;
@XmlElement(name = "age")
private int age;
}
序列化结果:
Zhang San 25
required 控制该元素在 XML 中是否必须出现(影响 XSD 生成,对序列化无强制约束);nillable 决定是否允许 xsi:nil="true" 形式的空值表示。
@XmlElement(required = true) → 生成的 XSD 中该元素为 minOccurs="1"
@XmlElement(nillable = true) → 允许设为 null,序列化时输出
@XmlElement(name = "email", required = true, nillable = true)
JAXB 默认只处理 public 字段或 public getter/setter(取决于 @XmlAccessorType 设置)。若字段是 private,又没写 getter,仅加 @XmlElement 可能无效。
@XmlAccessorType(XmlAccessType.FIELD) → 直接作用于 private 字段@XmlAccessorType(XmlAccessType.PROPERTY) → 注解加在 getter 上才生效@XmlAccessorType(XmlAccessType.FIELD)
public class Order {
@XmlElement(name = "order-id")
private Long id;
@XmlElement(name = "status")
private String status;
}
一个字段不能同时被 @XmlElement 和 @XmlAttribute 标记,否则 JAXB 运行时报错。如果想让某个值既可作元素又可作属性,需拆分为两个字段,或用 @XmlJavaTypeAdapter 自定义逻辑。
另外,@XmlElement 对基本类型包装类(如 Integer)设为 null 时,若 nillable=false(默认),序列化会跳过该元素;设为 true 才输出 nil 占位。
基本上就这些。用好 @XmlElement 能让你的 XML 结构清晰、兼容性强,也方便对接外部系统或生成标准 XSD。