jaxb是java标准api,用于java类与xml双向自动绑定;java 9起移除,需手动引入jakarta.xml.bind依赖;核心注解包括@xmlrootelement、@xmlelement等;使用jaxbcontext、marshaller和unmarshaller完成序列化与反序列化。
JAXB 是 Java Architecture for XML Binding 的缩写,它是一套标准 API,用于在 Java 类与 XML 文档之间自动完成双向转换(即“绑定”)。Java 9 开始默认移除 JAXB(作为 EE 模块被剥离),所以直接用需手动引入依赖;Java 11 及以后完全不自带。
你不需要从头解析 XML 或手写 DocumentBuilder,JAXB 能靠注解把对象“映射”成 XML,也能把 XML 字符串反向还原为对象——前提是类结构合理、注解到位、依赖齐备。
如何添加 JAXB 运行时依赖(Java 9+ 必做)
Java 9+ 中 javax.xml.bind 包已不在默认 classpath,必须显式添加实现:
- Maven 项目需在
pom.xml中加入:<dependency> <groupId>jakarta.xml.bind</groupId> <artifactId>jakarta.xml.bind-api</artifactId> <version>4.0.0</version> </dependency> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>4.0.4</version> </dependency>
- 注意包名已从
javax.xml.bind升级为jakarta.xml.bind(Java EE → Jakarta EE 迁移结果) - 若用老代码(含
javax.*导包),要么加jakarta.xml.bind:jakarta.xml.bind-api的javax.xml.bind兼容桥接版,要么批量替换导入(推荐后者)
@XmlRootElement 和其他关键注解怎么用
JAXB 靠注解驱动绑定逻辑。最常用的是:
-
@XmlRootElement:标记类可作为 XML 根元素(否则JAXBContext.newInstance(YourClass.class)会抛IllegalArgumentException) -
@XmlElement:控制字段/属性在 XML 中的标签名、是否必需(required = true)、是否 nillable -
@XmlAttribute:将字段序列化为 XML 属性而非子元素 -
@XmlAccessorType(XmlAccessType.FIELD):让 JAXB 直接访问字段(避免写 getter/setter),常配在类上
示例类: