@[TOC]
-
概要
- 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>
关注公众号获取更多咨询
注意:本文归作者所有,未经作者允许,不得转载