什么是JAXB技术 如何用JAXB实现Java对象与xml的相互转换

来源:站长工具作者:新加坡程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《什么是JAXB技术 如何用JAXB实现Java对象与xml的相互转换》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《什么是JAXB技术 如何用JAXB实现Java对象与xml的相互转换》有用,将其分享出去将是对创作者最好的鼓励。

JAXB全称为Java Architecture for XML Binding,是Java EE平台提供的用于实现Java对象与XML文档相互映射的技术规范,它允许开发者通过注解配置的方式,直接将Java类的实例序列化为XML格式,也可以把XML数据反序列化为对应的Java对象,大幅降低了XML数据处理的复杂度。

什么是JAXB技术 如何用JAXB实现Java对象与xml的相互转换

JAXB的核心组件

在使用JAXB之前,需要先了解几个核心的类:

  • JAXBContext:JAXB的上下文对象,是所有JAXB操作的入口,用于管理Java类和XML的映射关系。
  • Marshaller:编组器,负责将Java对象转换为XML格式。
  • Unmarshaller:反编组器,负责将XML数据转换为Java对象。

准备Java实体类

首先我们需要定义一个带有JAXB注解的Java实体类,这里以用户类为例,注解的作用是指定XML元素的名称、结构等映射规则:

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

// 指定该类的根节点名称为user
@XmlRootElement(name = "user")
public class User {
    private String name;
    private Integer age;
    private String email;

    // 指定XML中name子元素的映射
    @XmlElement(name = "name")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    // 指定XML中age子元素的映射
    @XmlElement(name = "age")
    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    // 指定XML中email子元素的映射
    @XmlElement(name = "email")
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

Java对象转XML的实现

接下来演示如何将User对象转换为XML字符串,步骤如下:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import java.io.StringWriter;

public class JavaToXmlDemo {
    public static void main(String[] args) {
        try {
            // 1. 创建JAXBContext实例,传入需要转换的实体类
            JAXBContext context = JAXBContext.newInstance(User.class);
            // 2. 创建编组器Marshaller
            Marshaller marshaller = context.createMarshaller();
            // 3. 设置格式化输出,让生成的XML更易读
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

            // 4. 创建User对象并设置属性
            User user = new User();
            user.setName("张三");
            user.setAge(25);
            user.setEmail("test@ipipp.com");

            // 5. 将对象转换为XML,输出到字符串
            StringWriter writer = new StringWriter();
            marshaller.marshal(user, writer);
            String xmlResult = writer.toString();
            System.out.println("生成的XML内容:");
            System.out.println(xmlResult);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行上述代码后,会输出如下格式的XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user>
    <name>张三</name>
    <age>25</age>
    <email>test@ipipp.com</email>
</user>

XML转Java对象的实现

反过来,我们也可以把上面的XML字符串转换回User对象,实现步骤如下:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;

public class XmlToJavaDemo {
    public static void main(String[] args) {
        try {
            // 待转换的XML字符串
            String xmlContent = "<?xml version="1.0" encoding="UTF-8" standalone="yes"?>n" +
                    "<user>n" +
                    "    <name>张三</name>n" +
                    "    <age>25</age>n" +
                    "    <email>test@ipipp.com</email>n" +
                    "</user>";

            // 1. 创建JAXBContext实例
            JAXBContext context = JAXBContext.newInstance(User.class);
            // 2. 创建反编组器Unmarshaller
            Unmarshaller unmarshaller = context.createUnmarshaller();
            // 3. 将XML字符串转换为User对象
            StringReader reader = new StringReader(xmlContent);
            User user = (User) unmarshaller.unmarshal(reader);

            // 4. 输出对象属性验证结果
            System.out.println("转换后的User对象属性:");
            System.out.println("姓名:" + user.getName());
            System.out.println("年龄:" + user.getAge());
            System.out.println("邮箱:" + user.getEmail());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

常见问题说明

JDK版本兼容性

JAXB在JDK 8及之前是包含在JDK内置的rt.jar中的,从JDK 9开始,JAXB被移出了默认的类路径,需要单独引入依赖,Maven依赖如下:

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>2.3.1</version>
</dependency>

复杂对象映射

如果Java对象中包含集合属性,比如用户有多个地址,我们可以使用<code>@XmlElementWrapper</code>注解来指定集合对应的XML包装节点,再配合<code>@XmlElement</code>指定集合内元素的名称,即可实现复杂结构的映射。

JAXBJava对象XML转换注解修改时间:2026-06-17 04:51:34

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。