Java XStream库怎么用 Java对象与XML互转

来源:站长站作者:冷风头衔:草根站长
导读:本期聚焦于小伙伴创作的《Java XStream库怎么用 Java对象与XML互转》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Java XStream库怎么用 Java对象与XML互转》有用,将其分享出去将是对创作者最好的鼓励。

XStream库的基本介绍

XStream是Java生态中常用的XML处理工具,核心能力是实现Java对象与XML字符串的双向转换,不需要开发者手动编写XML解析或生成的代码,大大降低了开发成本。它支持大部分常见的Java数据类型,包括基本类型、集合、自定义类等,使用起来非常灵活。

Java XStream库怎么用 Java对象与XML互转

环境引入

要使用XStream库,首先需要在项目中引入对应的依赖。如果是Maven项目,可以在pom.xml中添加如下依赖:

<dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.4.20</version>
</dependency>

如果是普通Java项目,可以下载XStream的jar包,手动导入到项目的类路径中即可。

基础使用示例

定义测试用的Java类

首先我们定义一个简单的自定义类,用于后续的转换测试:

public class User {
    private String name;
    private int age;
    private String email;

    // 必须提供无参构造方法,XStream反序列化时需要
    public User() {}

    public User(String name, int age, String email) {
        this.name = name;
        this.age = age;
        this.email = email;
    }

    // getter和setter方法
    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public String getEmail() {
        return email;
    }

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

Java对象转XML

使用XStream将Java对象转换为XML非常简单,只需要创建XStream实例,调用toXML方法即可:

import com.thoughtworks.xstream.XStream;

public class XStreamDemo {
    public static void main(String[] args) {
        // 创建XStream实例
        XStream xstream = new XStream();
        // 创建测试对象
        User user = new User("张三", 25, "zhangsan@ipipp.com");
        // 将对象转换为XML字符串
        String xml = xstream.toXML(user);
        System.out.println(xml);
    }
}

运行上述代码,输出的XML内容如下:

<com.thoughtworks.xstream.demo.User>
  <name>张三</name>
  <age>25</age>
  <email>zhangsan@ipipp.com</email>
</com.thoughtworks.xstream.demo.User>

XML转Java对象

将XML字符串转换回Java对象,使用fromXML方法即可:

import com.thoughtworks.xstream.XStream;

public class XStreamDemo {
    public static void main(String[] args) {
        XStream xstream = new XStream();
        // 待转换的XML字符串
        String xml = "<com.thoughtworks.xstream.demo.User>n" +
                "  <name>李四</name>n" +
                "  <age>30</age>n" +
                "  <email>lisi@ipipp.com</email>n" +
                "</com.thoughtworks.xstream.demo.User>";
        // 将XML转换为Java对象
        User user = (User) xstream.fromXML(xml);
        System.out.println("姓名:" + user.getName());
        System.out.println("年龄:" + user.getAge());
        System.out.println("邮箱:" + user.getEmail());
    }
}

运行后可以得到反序列化出来的User对象,输出对应的属性值。

常用进阶配置

自定义别名

默认情况下,XStream生成的XML标签会使用类的全限定名,可读性较差,我们可以通过别名配置简化标签名称:

import com.thoughtworks.xstream.XStream;

public class XStreamDemo {
    public static void main(String[] args) {
        XStream xstream = new XStream();
        // 给User类设置别名,XML中会用user作为根标签
        xstream.alias("user", User.class);
        // 给字段设置别名,可选
        xstream.aliasField("userName", User.class, "name");

        User user = new User("王五", 28, "wangwu@ipipp.com");
        String xml = xstream.toXML(user);
        System.out.println(xml);
    }
}

配置别名后的输出XML如下:

<user>
  <userName>王五</userName>
  <age>28</age>
  <email>wangwu@ipipp.com</email>
</user>

处理集合类型

XStream对集合类型也有很好的支持,比如List、Map等,我们可以直接转换包含集合的对象:

import com.thoughtworks.xstream.XStream;
import java.util.ArrayList;
import java.util.List;

public class UserGroup {
    private String groupName;
    private List<User> users;

    public UserGroup() {
        users = new ArrayList<>();
    }

    public String getGroupName() {
        return groupName;
    }

    public void setGroupName(String groupName) {
        this.groupName = groupName;
    }

    public List<User> getUsers() {
        return users;
    }

    public void setUsers(List<User> users) {
        this.users = users;
    }
}

class XStreamDemo {
    public static void main(String[] args) {
        XStream xstream = new XStream();
        xstream.alias("userGroup", UserGroup.class);
        xstream.alias("user", User.class);

        UserGroup group = new UserGroup();
        group.setGroupName("开发组");
        group.getUsers().add(new User("张三", 25, "zhangsan@ipipp.com"));
        group.getUsers().add(new User("李四", 30, "lisi@ipipp.com"));

        String xml = xstream.toXML(group);
        System.out.println(xml);
    }
}

输出的XML会正确包含集合中的所有User对象,反序列化时也能正确还原集合结构。

使用注意事项

  • 被转换的Java类需要提供无参构造方法,否则XStream反序列化时会抛出异常
  • 如果需要转换的字段是私有的,不需要提供getter和setter也可以正常转换,XStream会通过反射直接访问字段
  • 对于包含敏感信息的类,不建议直接使用XStream的默认配置,因为默认会序列化所有字段,可能需要通过权限配置限制序列化的字段范围
  • 如果XML结构发生变化,需要对应调整别名配置,否则反序列化可能会出现字段映射错误的问题

XStreamJava对象XML互转序列化反序列化修改时间:2026-06-11 12:45:45

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