@XStreamAlias
1.特点
简化的API;
无映射文件;
高性能,低内存占用;
整洁的XML;
不需要修改对象;支持内部私有字段,不需要setter/getter方法
提供序列化接口;
自定义转换类型策略;
2.使用场景
Transport转换
Persistence 持久化对象
Configuration 配置
Unit Tests 单元测试
Interface服务之间XML消息的交互
3.model
实体类
importcom.thoughtworks.xstream.annotations.XStreamAlias;/***@authorceshi
* @Title: Student
* @ProjectName ceshi
* @Description: TODO
* @date 2018/6/2817:29*/@XStreamAlias("Student_Message")public classStudent {privateString id;privateString name;privateString age;privateString achievement;publicStudent(String id,String name,String age,String achievement){this.id =id;this.name =name;this.age =age;this.achievement =achievement;
}publicString getId() {returnid;
}public voidsetId(String id) {this.id =id;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}publicString getAge() {returnage;
}public voidsetAge(String age) {this.age =age;
}publicString getAchievement() {returnachievement;
}public voidsetAchievement(String achievement) {this.achievement =achievement;
}
@OverridepublicString toString() {return "Student{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age='" + age + '\'' +
", achievement='" + achievement + '\'' +
'}';
}
}
工具类
importcom.thoughtworks.xstream.XStream;importcom.thoughtworks.xstream.io.xml.DomDriver;/***@authorceshi
* @Title: XStreamUtils
* @ProjectName ceshi
* @Description: TODO
* @date 2018/6/2817:38*/
public classXStreamUtils {/*** 将Object转换为xml
*@paramobj 转换的bean
*@returnbean转换为xml*/
public staticString objectToXml(Object obj) {
XStream xStream= newXStream();//xstream使用注解转换
xStream.processAnnotations(obj.getClass());returnxStream.toXML(obj);
}/*** 将xml转换为T
*@param 泛型
*@paramxml 要转换为T的xml
*@paramcls T对应的Class
*@returnxml转换为T*/
public static T xmlToObject(String xml, Classcls){
XStream xstream= new XStream(newDomDriver());//xstream使用注解转换
xstream.processAnnotations(cls);return(T) xstream.fromXML(xml);
}
}
测试类
importorg.junit.Test;/***@authorceshi
* @Title: JunitXStream
* @ProjectName ceshi
* @Description: TODO
* @date 2018/6/2817:29*/
public classJunitXStream {
@Testpublic voidtest(){
Student s= new Student("1","张三","18","90");
String xml=XStreamUtils.objectToXml(s);
xml= "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+xml;
xml= xml.replaceAll("__","_");
System.out.println(xml);
Student ss= XStreamUtils.xmlToObject(xml,Student.class);
System.out.println(ss);
}
}
结果:
pom:需要使用到 xstream-1.4.8.jar
com.thoughtworks.xstream
xstream
1.4.8
注意事项:
1.XStream有一些小bug,在定义别名中的下划线“_”转换为xml后会变成“__”这个符号,下划线问题可以用下面这个解决
XStream xStream = new XStream(new XppDriver(new XmlFriendlyNameCoder("_-", "_")));
也可以像测试类中用:replaceAll("__","_"); 替换掉