在Java项目里使用JAXB把Java对象序列化为XML时,默认会以字段或属性的名字作为XML元素名。如果希望自定义输出后的标签名称,最直接的方式就是在字段上添加@XmlElement注解,并通过它的name属性来指定。

@XmlElement注解基础用法
@XmlElement位于javax.xml.bind.annotation包下,可以用在字段或者getter方法上。最常用的就是name参数,用来设置生成的XML元素名称。
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "user")
public class User {
private String userName;
private int age;
// 把字段userName映射为XML中的<name>元素
@XmlElement(name = "name")
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@XmlElement(name = "age")
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
上面这段代码中,Java字段叫userName,但序列化后XML里显示的是<name>,这就是@XmlElement(name = "name")起到的作用。
控制必填与空值
除了改名字,@XmlElement还能通过required和nillable参数控制元素是否必须出现,以及是否允许显式空值。
- required=true表示对应元素在XML中为必填,JAXB在生成 schema 时会标记minOccurs=1
- nillable=true表示允许使用xsi:nil="true"来表示空值
import javax.xml.bind.annotation.XmlElement;
public class Book {
private String title;
@XmlElement(name = "book_title", required = true, nillable = true)
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
在集合字段上使用
如果字段是List类型,默认会为每个元素生成一个以字段名为标签的节点。配合@XmlElement可以统一指定集合里每个元素的名称。
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;
@XmlRootElement(name = "group")
public class Group {
private List<String> members;
// 集合中每个元素都用<member>包裹
@XmlElement(name = "member")
public List<String> getMembers() {
return members;
}
public void setMembers(List<String> members) {
this.members = members;
}
}
完整序列化示例
下面演示如何把对象写成XML字符串,验证@XmlElement的效果。
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import java.io.StringWriter;
public class Demo {
public static void main(String[] args) throws Exception {
User user = new User();
user.setUserName("张三");
user.setAge(28);
JAXBContext context = JAXBContext.newInstance(User.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter writer = new StringWriter();
marshaller.marshal(user, writer);
System.out.println(writer.toString());
}
}
运行后会得到类似下面的XML,可以看到userName已经变成name:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user>
<name>张三</name>
<age>28</age>
</user>
通过@XmlElement注解,开发者可以轻松地把Java对象里的字段名映射成业务需要的XML元素名,而不必修改Java字段本身,保持了代码与报文结构的解耦。
JAXBXmlElementXML序列化修改时间:2026-07-26 13:51:20