使用XStream實現Java對象與XML互相轉換

XStream簡介

XStream是一個Java對象與XML互相轉換的工具類庫。html

官網連接: http://x-stream.github.io/index.htmljava

簡單使用

下載頁面:http://x-stream.github.io/download.htmlgit

使用Maven構建項目的加入如下依賴:github

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

建立Beanweb

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

Java對象轉XML:

使用xStream.toXML()方法。工具

public static void main(String[] args) {
    
    User user = new User("lanweihong", "lwhhhp@gmail.com");
    
    //建立解析XML對象
    XStream xStream = new XStream();
    //設置別名, 默認會輸出全路徑
    xStream.alias("User", User.class);
    //轉爲xml
    String xml = xStream.toXML(user);
    System.out.println(xml);
}

轉換後的xml文本爲:this

<User>
  <userName>lanweihong</userName>
  <email>lwhhhp@gmail.com</email>
</User>

XMLJava對象

使用xStream.fromXML()方法。code

public static void main(String[] args) {
    XStream xStream = new XStream();
    xStream.alias("User", User.class);
    String xml = "<User>\n" +
            "  <userName>lanweihong</userName>\n" +
            "  <email>lwhhhp@gmail.com</email>\n" +
            "</User>";
    //轉對象
    User user = (User)xStream.fromXML(xml);
    System.out.println(user.toString());
}

輸出文本爲:xml

User:{userName=lanweihong,email=lwhhhp@gmail.com}

使用註解

最基本的註解@XStreamAlias用於設置字段別名;咱們將上述例子建立的User對象添加註解改造一下:htm

@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...
}

XStream默認不會讀取這個註解,由於,咱們須要聲明XStream的註解來源:

public static void main(String[] args) {
    User user = new User("lanweihong", "lwhhhp@gmail.com");
    XStream xStream = new XStream();
    //聲明XStream註解來源
    xStream.processAnnotations(User.class);
    String xml = xStream.toXML(user);
    System.out.println(xml);
}

輸出文本爲:

<user>
  <username>lanweihong</username>
  <email>lwhhhp@gmail.com</email>
</user>

因而可知,生成的xml節點名稱已經變爲咱們使用@XStreamAlias註解的別名。

簡單封裝爲工具類

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

public class XmlUtils {

    /**
     * XML轉對象
     * @param clazz 對象類
     * @param str xml字符串
     * @param <T> T
     * @return
     */
    public static <T> T parseFromXml(Class<T> clazz, String xml) {
        //建立解析XML對象
        XStream xStream = new XStream(new DomDriver());
        //處理註解
        xStream.processAnnotations(clazz);
        @SuppressWarnings("unchecked")
        //將XML字符串轉爲bean對象
        T t = (T)xStream.fromXML(xml);
        return t;
    }

    /**
     * 對象轉xml
     * @param obj 對象
     * @return
     */
    public static String toXml(Object obj) {
        XStream xStream = new XStream(new DomDriver());
        xStream.processAnnotations(obj.getClass());
        return xStream.toXML(obj);
    }

}

原文地址:https://www.lwhweb.com/2017/11/21/xstream-1/

相關文章
相關標籤/搜索