@XStreamAlias使用

一、 特点:

简化的API; 
无映射文件; 
高性能,低内存占用; 
整洁的XML; 
不需要修改对象;支持内部私有字段,不需要setter/getter方法 
提供序列化接口; 
自定义转换类型策略; 


XStream的优点很多,但是也有一些小bug,比如在定义别名中的下划线“_”转换为xml后会变成“__”这个符号, 不过下划线问题可以用下面这个解决

 XStream xStream = new XStream(new XppDriver(new XmlFriendlyNameCoder("_-", "_")));

二、 使用场景

Transport转换 
Persistence 持久化对象 
Configuration 配置 
Unit Tests 单元测试

Interface服务之间XML消息的交互

案例代码:

@XStreamAlias("kfpt_dept") //注意这个,后面变成了<kfpt__dept>  下划线。。。。
class Dept {
private String deptName; private List<Staff> staffs; public String getDeptName() {
return deptName;
} public void setDeptName(String deptName) {
this.deptName = deptName;
} public List<Staff> getStaffs() {
return staffs;
} public void setStaffs(List<Staff> staffs) {
this.staffs = staffs;
} @Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
}
} @XStreamAlias("kfpt_staffs")
class Staff {
private String name;
private int age; public Staff() {
super();
} public Staff(String name, int age) {
super();
this.name = name;
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} @Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
} }

转换工具类:

public class XstreamUtil {

    /**
* 将bean转换为xml
* @param obj 转换的bean
* @return bean转换为xml
*/
public static String objectToXml(Object obj) {
// XStream xStream = new XStream();
 XStream xStream = new XStream(new XppDriver(new XmlFriendlyNameCoder("_-", "_")));//解决下划线问题
//xstream使用注解转换
xStream.processAnnotations(obj.getClass());
return xStream.toXML(obj);
} /**
* 将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);
}
}

main方法测试

public static void main(String[] args) {
//java bean 转 xml
Dept d = new Dept();
List<Staff> staffs = new ArrayList<>();
Staff s1 = new Staff("wuyun", 20);
Staff s2 = new Staff("lilei", 22);
staffs.add(s1);
staffs.add(s2);
d.setDeptName("开放平台");
d.setStaffs(staffs);
System.out.println(objectToXml(d));
/*
 用这个方法 XStream xStream = new XStream(); 会有下划线问题

<kfpt__dept>
<deptName>开放平台</deptName>
<staffs>
<kfpt__staffs>
<name>wuyun</name>
<age>20</age>
</kfpt__staffs>
<kfpt__staffs>
<name>lilei</name>
<age>22</age>
</kfpt__staffs>
</staffs>
</kfpt__dept>

XStream xStream = new XStream(new XppDriver(new XmlFriendlyNameCoder("_-", "_")));//可以解决下划线问题

<kfpt_dept>
<deptName>开放平台</deptName>
<staffs>
<kfpt_staffs>
<name>wuyun</name>
<age>20</age>
</kfpt_staffs>
<kfpt_staffs>
<name>lilei</name>
<age>22</age>
</kfpt_staffs>
</staffs>
</kfpt_dept>

*/

        //xml 转 java bean
// String xml = "<kfpt__dept><deptName>开放平台</deptName><staffs><kfpt__staffs><name>wuyun</name><age>20</age></kfpt__staffs><kfpt__staffs><name>lilei</name><age>22</age></kfpt__staffs></staffs></kfpt__dept>";
// XStream xstream = new XStream(new DomDriver());
// //xstream使用注解转换
// xstream.processAnnotations(Dept.class);
// System.out.println(((Dept) xstream.fromXML(xml)).toString()); // System.out.println(xmlToObject(xml, Dept.class).toString());
/*

com.cmcc.open.ss.vo.req.Dept@5660d2d2[
deptName=开放平台
staffs=[com.cmcc.open.ss.vo.req.Staff@6eb1054b[
name=wuyun
age=20
], com.cmcc.open.ss.vo.req.Staff@27d2b7b3[
name=lilei
age=22
]]
]

*/


    }

最新文章

  1. Object-C中动态类型对象相关操作汇总
  2. cinder backup
  3. nginx + keepalived 双机热备
  4. mysql 任意连接
  5. 使用 XML 实现 REST 式的 SOA
  6. String对象不可改变的特性
  7. 推断类型var
  8. HDU4452 Running Rabbits
  9. Shell脚本常用命令简介
  10. Java 枚举随笔
  11. curl的封装
  12. Java 输出指定编码的字符串
  13. 记一次SQL调优/优化(SQL tuning)——性能大幅提升千倍以上
  14. redis使用场景和java测试案例
  15. table td中的内容过长,显示为固定长度,多余部分用省略号显示
  16. Chrome 远程代码执行漏洞CVE-2019-5786-EXP
  17. Caffeine缓存
  18. python 启动新进程执行脚本
  19. 从kepware定时取web api内容
  20. 关于Linux系统指令 top 之 %si 占用高,分析实例一

热门文章

  1. html-文本处理
  2. java实现word转pdf文件(高效不失真)
  3. cocos2dx位图字体bitmapfont使用
  4. NGUI本地化
  5. JS对象序列化为JSON对象的方法
  6. pipe_wait问题_转
  7. android最佳实践的建议(翻译自android-best-practices)
  8. nginx调用php-fpm出错解决方法和nginx配置详解
  9. Codeforces Round #429 (Div. 2) E. On the Bench
  10. 快使用阿里云的maven仓库