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

  • Post author:
  • Post category:java




添加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...
}



版权声明:本文为weixin_38938840原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。