@XmlRootElement 是 JAXB 中标识 XML 根元素的必需注解,须标注在类上并配 public 无参构造器;可选 name 和 namespace 属性自定义根标签名与命名空间;字段映射需配合 @XmlElement、@XmlAttribute 等注解;实际编组依赖 JAXBContext 解析元数据。

@XmlRootElement 是 JAXB(Java Architecture for XML Binding)中用于将 Java 类映射为 XML 根元素的核心注解。它告诉 JAXB 运行时:这个类可以作为 XML 文档的根节点进行序列化(marshal)或反序列化(unmarshal)。
必须标注在类上,且通常需配 public 无参构造器
只有被 @XmlRootElement 标记的类才能直接参与 JAXB 的根级编组操作。JAXB 在反序列化时需要通过反射创建实例,因此该类必须有一个 public 无参数构造方法(即使你没写,编译器默认提供;但若定义了带参构造器又没显式写无参构造器,就会报错)。
- 正确示例:public class User { public User() {} }
- 错误示例:public class User { public User(String name) { ... } }(缺少无参构造器)
可选指定 name 和 namespace 属性
默认情况下,XML 根元素名取自类名(首字母小写),如 User 类生成
-
@XmlRootElement(name = "person") → 生成
-
@XmlRootElement(namespace = "http://example.com/ns") → 生成
- 两者结合:@XmlRootElement(name = "person", namespace = "http://example.com/ns")
与 @XmlElement、@XmlAttribute 配合控制字段映射
@XmlRootElement 只负责“根身份”,字段如何变成 XML 子元素或属性,需额外注解:
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
立即学习“Java免费学习笔记(深入)”;
- 普通字段默认转为子元素(如 String name →
Tom ) - 加 @XmlAttribute 变成属性:@XmlAttribute private String id; →
- 加 @XmlElement(name = "full-name") 自定义子元素名
- 集合字段建议加 @XmlElement 明确包装,避免生成意外 wrapper 元素
使用 JAXBContext 和 Marshaller/Unmarshaller 执行转换
标注好类后,实际转换不依赖注解本身,而是靠 JAXB 运行时解析这些元数据:
- 序列化(对象 → XML):JAXBContext context = JAXBContext.newInstance(User.class); Marshaller m = context.createMarshaller(); m.marshal(user, System.out);
- 反序列化(XML → 对象):Unmarshaller u = context.createUnmarshaller(); User u = (User) u.unmarshal(new StringReader(xmlStr));
- 注意:传入 newInstance() 的必须是带 @XmlRootElement 的类,否则抛 JAXBException









