639°

XStrream实现XML与Java对象互转

@[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>

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

关注公众号获取更多咨询

Java开发小驿站


全部评论: 0

    我有话说: