XStream如何实现Bean与xml互转的代码示例

来源:3D模型作者:广州SEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《XStream如何实现Bean与xml互转的代码示例》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《XStream如何实现Bean与xml互转的代码示例》有用,将其分享出去将是对创作者最好的鼓励。

XStream是Java生态中常用的XML序列化与反序列化工具,无需复杂配置就能实现普通Java Bean和XML字符串的快速转换,大幅降低XML数据处理的工作量。它支持自定义别名、字段映射、集合处理等特性,适配多数常规业务场景。

XStream环境准备

首先需要在项目中引入XStream的依赖,如果你使用Maven构建项目,可以在pom.xml中添加以下依赖:

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

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

基础Bean定义

我们先定义一个简单的用户Bean作为转换的示例对象,包含用户id、用户名、年龄三个基础属性,同时提供对应的getter、setter方法和无参构造方法,XStream转换时需要Bean存在无参构造:

public class User {
    private Integer id;
    private String name;
    private Integer age;

    // 必须提供无参构造
    public User() {
    }

    public User(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    // getter和setter方法
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

Bean转XML示例

使用XStream将Bean对象转换为XML字符串非常简单,只需要创建XStream实例,调用toXML方法即可,以下是完整示例:

import com.thoughtworks.xstream.XStream;

public class BeanToXmlDemo {
    public static void main(String[] args) {
        // 创建XStream实例
        XStream xStream = new XStream();
        // 创建测试Bean对象
        User user = new User(1, "张三", 25);
        // 将Bean转换为XML字符串
        String xml = xStream.toXML(user);
        System.out.println("Bean转XML结果:");
        System.out.println(xml);
    }
}

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

<User>
  <id>1</id>
  <name>张三</name>
  <age>25</age>
</User>

XML转Bean示例

将XML字符串转换回Bean对象,只需要调用XStream的fromXML方法,传入XML字符串即可,示例如下:

import com.thoughtworks.xstream.XStream;

public class XmlToBeanDemo {
    public static void main(String[] args) {
        // 创建XStream实例
        XStream xStream = new XStream();
        // 待转换的XML字符串
        String xml = "<User><id>1</id><name>张三</name><age>25</age></User>";
        // 将XML转换为Bean对象
        User user = (User) xStream.fromXML(xml);
        System.out.println("XML转Bean结果:");
        System.out.println("用户id:" + user.getId());
        System.out.println("用户名:" + user.getName());
        System.out.println("用户年龄:" + user.getAge());
    }
}

运行后可以看到正确输出Bean的各个属性值,说明XML转Bean成功。

自定义别名优化XML格式

默认情况下XStream生成的XML标签会使用类的全限定名或者简单类名,我们可以通过别名配置让XML格式更符合预期,比如将根标签改为user,将字段名改为更简洁的形式:

import com.thoughtworks.xstream.XStream;

public class AliasDemo {
    public static void main(String[] args) {
        XStream xStream = new XStream();
        // 设置类别名,根标签会变成user
        xStream.alias("user", User.class);
        // 设置字段别名,id标签改为user_id
        xStream.aliasField("user_id", User.class, "id");
        // 设置字段别名,name标签改为user_name
        xStream.aliasField("user_name", User.class, "name");

        User user = new User(2, "李四", 30);
        String xml = xStream.toXML(user);
        System.out.println("自定义别名后的XML:");
        System.out.println(xml);

        // 反序列化时也需要设置相同的别名才能正确映射
        User parseUser = (User) xStream.fromXML(xml);
        System.out.println("反序列化后的用户名:" + parseUser.getName());
    }
}

上述代码运行后生成的XML如下,标签名更符合常规XML的命名习惯:

<user>
  <user_id>2</user_id>
  <user_name>李四</user_name>
  <age>30</age>
</user>

复杂对象转换处理

如果Bean中包含集合、嵌套对象等复杂结构,XStream同样可以正常处理,我们定义一个包含订单列表的用户类来演示:

import java.util.List;

public class OrderUser {
    private Integer id;
    private String name;
    private List<String> orders;

    public OrderUser() {
    }

    public OrderUser(Integer id, String name, List<String> orders) {
        this.id = id;
        this.name = name;
        this.orders = orders;
    }

    // getter和setter方法
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public List<String> getOrders() {
        return orders;
    }

    public void setOrders(List<String> orders) {
        this.orders = orders;
    }
}

复杂对象的转换示例:

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

public class ComplexDemo {
    public static void main(String[] args) {
        XStream xStream = new XStream();
        // 设置类别名
        xStream.alias("orderUser", OrderUser.class);
        xStream.alias("order", String.class);

        // 创建包含集合的Bean对象
        List<String> orderList = new ArrayList<>();
        orderList.add("订单1001");
        orderList.add("订单1002");
        OrderUser orderUser = new OrderUser(3, "王五", orderList);

        // Bean转XML
        String xml = xStream.toXML(orderUser);
        System.out.println("复杂对象转XML结果:");
        System.out.println(xml);

        // XML转Bean
        OrderUser parseUser = (OrderUser) xStream.fromXML(xml);
        System.out.println("解析后的订单列表:" + parseUser.getOrders());
    }
}

运行后可以看到集合属性也能正确转换,嵌套结构处理无需额外复杂配置。

注意事项

  • XStream默认会序列化所有非静态、非瞬态的字段,如果有不需要序列化的字段,可以添加transient修饰符,或者通过xStream.omitField(Class, String)方法排除指定字段。
  • 反序列化XML时,需要确保XML的结构和Bean的属性结构匹配,否则会抛出转换异常。
  • 如果Bean中没有无参构造方法,XStream反序列化时会报错,需要手动添加无参构造。
  • 生产环境中如果需要处理不可信的XML输入,建议开启XStream的安全配置,避免反序列化漏洞。

XStreamBean_to_xmlxml_to_BeanJava序列化修改时间:2026-07-23 21:40:02

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