JAXB反序列化需配置带注解的Java类(@XmlRootElement等)、创建JAXBContext并调用unmarshal;JDK9+需引入jakarta.xml.bind依赖并更新包名。
使用JAXB进行XML到Java对象的转换(即Unmarshalling)非常直接,关键在于正确配置实体类、确保XML结构匹配,并调用Unmarshaller解析。JDK 8及以前版本自带JAXB,JDK 9+需额外引入依赖。
Java类必须能被JAXB识别——通常通过@XmlRootElement标注根元素,并用@XmlElement、@XmlAttribute等声明字段与XML节点的映射关系。
@XmlRootElement(name = "person"),name值应与XML根标签一致
@XmlElement(name = "name")对应子元素名;如字段名与XML标签名相同,name属性可省略@XmlAttribute(name = "id")
@XmlElement(name = "item")并配合List,避免用ArrayList等具体实现类核心步骤是创建JAXBContext,获取Unmarshaller,再调用unmarshal()方法传入XML源(File、InputStream或StringReader均可)。
@XmlRootElement中指定namespace,且unmarshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", ...)可选JAXBException,建议用try-catch捕获并打印e.getMessage()快速定位问题实际转换中容易卡在几个典型环节:类未识别、字段不赋值、集合为空、日期/枚举解析失败。
JAXBContext.newInstance()参数包含所有相关类(如有嵌套对象,一并传入)@XmlAccessorType(XmlAccessType.FIELD)正确覆盖@XmlElementWrapper(name="items"),则XML中必须有- ...
@XmlSchemaType(name="date")或自定义XmlAdapter处理格式(如LocalDateTime需适配器)从JDK 9开始,JAXB被移出默认模块,需手动添加Maven依赖:
javax.xml.bind升级为jakarta.xml.bind,导入语句和注解类名需同步更新