XStream實現XML與Java對象互轉


  • 概要

    • XStream簡介
    • 示例

概要

XStream簡介

XStream是個很強大的工具,能將java對象和xml之間相互轉化。xstream不在意java類中成員變量是私有還是公有,也不在乎是否有默認構造函數。它調用方式也非常簡單:從xml對象轉化爲java對象,使用fromXML()方法;從java對象序列化爲xml,toXML()即可,很方便。xstream也支持註解方式,這些都是爲了簡化輸出而設計。

特別是微信開發平臺的API,大部分都是XML格式的數據,但是目前用JSON的比較多,所以每次都需要互轉一下,這就有點煩,用上XStream之後就舒服了。

示例

比如一個微信公衆號的接受消息接口

微信服務器發送一串XML格式的數據到我們自己的服務

<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[fromUser]]></FromUserName>
  <CreateTime>1348831860</CreateTime>
  <MsgType><![CDATA[text]]></MsgType>
  <Content><![CDATA[this is a test]]></Content>
  <MsgId>1234567890123456</MsgId>
</xml>

我們可以建一個實體

import com.thoughtworks.xstream.annotations.XStreamAlias;

@XStreamAlias("xml")//這裏表示對象節點,可以自定義,不一定是xml eg: Message 
public class Message {
 
	@XStreamAlias("ToUserName")
	private String toUserName;

	@XStreamAlias("FromUserName")
	private String fromUserName;

	@XStreamAlias("CreateTime")
	private String createTime;

	@XStreamAlias("MsgType")
	private String msgType;

	@XStreamAlias("Content")
	private String content;

	@XStreamAlias("MsgId")
	private String msgId;

	...
}

在controller層接收數據

@PostMapping("/XXX")
public void XXXX(@RequestBody Message message){//這樣便可以直接將xml轉換爲Java對象
    ...
}

提供一個工具類可以將對象和XML互轉

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

public class XstreamUtil {
	/**
	 * 將xml轉換爲bean
	 * @param <T> 泛型
	 * @param xml 要轉換爲bean的xml
	 * @param cls bean對應的Class
	 * @return xml轉換爲bean
	 */
	public static <T> T xmlToObject(String xml, Class<T> cls){
		XStream xstream = new XStream(new DomDriver());
		//xstream使用註解轉換
		xstream.processAnnotations(cls);
		return (T) xstream.fromXML(xml);
	}
 	
 	/**
 	 * 將對象轉xml
 	 * @param object 需轉換的對象
 	 * @return xml字符串
 	 */
	public static String ObjectToXml(Object object){
		XStream xstream = new XStream();
		xstream.autodetectAnnotations(true);//自動檢測模式,默認
		return xstream.toXML(object);
	}

}

最後附上依賴

<!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
<dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.4.10</version>
</dependency>

個人博客:https://www.cqwxhn.xin

關注公衆號獲取更多諮詢

Java開發小驛站

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章