前言
在微信订阅号和支付宝生活号日常开发中,我们会涉及到对象和XML之间的相互转换。
比如我们可以利用StringBuilder去直接拼接来构造XML
/**
* 构造基础的响应消息
*
* @return
*/
public static String buildBaseAckMsg(String fromUserId) {
StringBuilder sb = new StringBuilder();
sb.append("<XML>");
sb.append("<ToUserId><![CDATA[" + fromUserId + "]]></ToUserId>");
sb.append("<AppId><![CDATA[" + AlipayServiceEnvConstants.APP_ID + "]]></AppId>");
sb.append("<CreateTime>" + Calendar.getInstance().getTimeInMillis() + "</CreateTime>");
sb.append("<MsgType><![CDATA[ack]]></MsgType>");
sb.append("</XML>");
return sb.toString();
}
作为像我这么懒得程序员,肯定会去找大佬写好的轮子,这就是我和XStream
相遇的契机。下面我们一起走进XStream
;
一.关于 XStream
Xstream 是一个简单的库,用于将对象序列化为 XML 然后再序列化回来。
二.简单入门
2.1 创建要序列化的类
这里有几个简单的类,XStream 可以将这些类的实例转换为 XML,然后再转换回来。
public class Person {
private String firstname;
private String lastname;
private PhoneNumber phone;
private PhoneNumber fax;
// ... constructors and methods
}
public class PhoneNumber {
private int code;
private String number;
// ... constructors and methods
}
注意: 注意这些字段是私有的。Xstream 不关心字段的可见性。不需要getters or setters
。此外,XStream 并不限制你拥有一个默认构造函数
。
2.2 初始化 XStream
引入依赖
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.10</version>
</dependency>
要使用 XStream,只需实例化 XStream 类:
XStream xstream = new XStream();
2.3.将序列化对象转为xml
让我们创建一个 Person 实例并填充它的字段:
Person person = new Person("Joe", "milo");
person.setPhone(new PhoneNumber(123,"1234-456"));
person.setFax(new PhoneNumber(123,"999-456"));
现在,要将其转换为XML,只需要简单的调用XStream的toXML()
方法
String xml = xstream.toXML(person);
现在,为了使 XStream 输出的 XML 更简洁,可以为 XML 元素名的自定义类名创建别名。这是使用 XStream 所需的惟一映射类型,当然这是可选的。
xstream.alias("person",Person.class);
我们会发现XML变得更简洁
2.4.将XML反序列化对象
首先,我们重写Person
对象的toString()