使用XStream实现Java对象与XML互相转换(不断更新中)

本文介绍如何使用XStream库实现Java对象与XML之间的相互转换,包括配置pom依赖、工具类代码示例及使用注解进行转换的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

添加pom依赖
<dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.4.15</version>
</dependency>

工具类代码
package com.yongen.org;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

/**
 * @author yongen
 * @description: 使用XStream实现Java对象与XML互相转换
 * @date 2021/5/18 3:29 下午
 */
public class XmlUtils {

    /**
     * XML转对象  单一节点
     * @param clazz 对象类
     * @param xml   xml字符串
     * @return <T>  对象类
     */
    public static <T> T parseFromXml(Class<T> clazz, String xml) {
        XStream xStream = new XStream();
        //设置别名, 默认会输出全路径,这里设置为类名小写
        xStream.alias(clazz.getSimpleName().toLowerCase(), clazz);
        //解决xStream:Security framework of XStream not initialized, XStream is probably vulnerable
        XStream.setupDefaultSecurity(xStream);
        xStream.allowTypes(new Class[]{clazz});
        //将XML字符串转为bean对象
        try{
            return (T) xStream.fromXML(xml.trim());
        }catch (Exception e){
            return null;
        }
    }

    /**
     * 对象转XML 单一节点
     * @param obj 对象
     * @return xml xml字符串
     */
    public static <T> String toXml(T obj, Class<T> clazz) {
        //创建解析XML对象
        XStream xStream = new XStream();
        //设置别名, 默认会输出全路径,这里设置为类名小写
        xStream.alias(clazz.getSimpleName().toLowerCase(), clazz);
        try{
            return xStream.toXML(obj);
        }catch (Exception e){
            return null;
        }
    }


    /**
     * XML转对象(基于注解的形式) 单一节点
     * @param clazz 对象类
     * @param xml   xml字符串
     * @return <T>  对象类
     */
    public static <T> T parseFromXmlAnnotations(Class<T> clazz, String xml) {
        //创建解析XML对象
        XStream xStream = new XStream(new DomDriver());
        //处理注解
        xStream.processAnnotations(clazz);
        //解决xStream:Security framework of XStream not initialized, XStream is probably vulnerable
        XStream.setupDefaultSecurity(xStream);
        xStream.allowTypes(new Class[]{clazz});
        //将XML字符串转为bean对象
        try{
            return (T) xStream.fromXML(xml.trim());
        }catch (Exception e){
            return null;
        }
    }

    /**
     * 对象转XML(基于注解的形式) 单一节点
     * @param obj 对象
     * @return xml xml字符串
     */
    public static String toXmlAnnotations(Object obj) {
        XStream xStream = new XStream(new DomDriver());
        xStream.processAnnotations(obj.getClass());
        try{
            return xStream.toXML(obj);
        }catch (Exception e){
            return null;
        }
    }


}

示例代码

新建一个Java对象

public class User {

    private String userName;

    private String email;

    public User() {}

     public User(String userName, String email) {
        this.userName = userName;
        this.email = email;
    }

    public String toString() {
        return "User:{userName=" + this.userName + ",email=" + this.email + "}";
    }

    //Getter and Setter...
}

如果使用注解
@XStreamAlias("user")
public class User {

    @XStreamAlias("username")
    private String userName;

    @XStreamAlias("email")
    
    private String email;

    public User() {}

     public User(String userName, String email) {
        this.userName = userName;
        this.email = email;
    }

    public String toString() {
        return "User:{userName=" + this.userName + ",email=" + this.email + "}";
    }

    //Getter and Setter...
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值