XStream实现XML与Java对象互转

it2022-05-05  120

文章目录

概要XStream简介示例


概要

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

关注公众号获取更多咨询


最新回复(0)