-
概要
- 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>
關注公衆號獲取更多諮詢