xml与java对象转换 -- XStreamAlias

 

@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;}@Overridepublic 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;}@Overridepublic 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 转 xmlDept 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
]]
]


*/


}

 

转载于:https://www.cnblogs.com/wuyun-blog/p/7800067.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows下安装zabbix_agent

Server端在linux系统上&#xff0c;server端版本为2.2.6&#xff0c;是以前就装好的已经跑了很久的稳定版。目前的需求是要将新业务的服务器添加到该监控队列。而这些服务器是windows系统。 第一次下载了最新版的zabbix_agent for windows。按照正常程序安装完成后&#xff0c;…

JS和Jquery获取和修改label的值

获取值&#xff1a; label标签在JS和Jquery中使用不能像其他标签一样用value获取它的值&#xff1a; var labeldocument.getElementById("id");var valuelabel.value;var value$("#id").val();可以这样&#xff1a;JS: var labeldocument.getElementById(&…

Linux内核访问外设I/O--动态映射(ioremap)和静态映射(map_desc)

本篇文章主要介绍了"Linux内核访问外设I/O--动态映射(ioremap)和静态映射(map_desc)"&#xff0c;主要涉及到Linux内核访问外设I/O--动态映射(ioremap)和静态映射(map_desc)方面的内容&#xff0c;对于Linux内核访问外设I/O--动态映射(ioremap)和静态映射(map_desc)感…

点击显示隐藏盒子函数

示例&#xff1a;&#xff08;手机导航栏&#xff09; <header> <div class"logo"></div> <p class"text">微蜂传媒</p> <div class"nav_btn" οnclick"showHide(.dropdown_menu)"></div> …

MyBatis 缓存机制

Mybatis 有两级缓存&#xff1a; 一级缓存&#xff1a; 也称为本地缓存&#xff0c;SqlSession级别的缓存。一级缓存是一直开启的&#xff1b; 与数据库同一次会话期间查询到的数据会放在本地缓存中&#xff0c;以后如果需要获取相同的数据&#xff0c;直接从缓存中拿&#xff…

Android虚拟化引擎VirtualApp探究

2019独角兽企业重金招聘Python工程师标准>>> 介绍 首先需要说明的是&#xff0c;VirtualApp并不是前些阵子滴滴开源的插件化框架VirtualApk。 VirtualApp是一个更加黑科技的东西&#xff0c;他可以创建一个虚拟空间&#xff0c;你可以在虚拟空间内任意的安装、启动和…

揭开全景相机的创业真相

&#xff08;Bubl全景相机&#xff09; 国外一开源&#xff0c;国内就自主。这在VR&#xff08;虚拟现实&#xff09;领域体现的淋漓尽致——Google的Cardborad一开源&#xff0c;国内就有数百家厂商蜂拥做了各种插手机的VR盒子。到了全景相机&#xff0c;这一幕似乎又开始重演…

一个厉害的网站

2019独角兽企业重金招聘Python工程师标准>>> dromara 发现一个网站&#xff0c;发现上面的开源项目真的都非常厉害诶。 转载于:https://my.oschina.net/miaojiangmin/blog/2934221

最全VR产业链全景图(必收藏)

http://www.360doc.com/content/16/0324/20/28622037_544974325.shtml

本地计算机绑定域名访问

我们知道localhost绑定的是本地主机IP&#xff08;127.0.0.1&#xff09;&#xff0c;那么我们能不能自定义绑定本地主机IP地址呢&#xff1f;答案是肯定的&#xff0c;同修改hosts文件&#xff0c;我们可以实现上面的需求。 打开本地C盘&#xff0c;找到Windows文件夹-->Sy…

Tomcat配置及原理文章

同一tomcat实现多端口多域名访问 tomcat源码分析(第一篇 从整体架构开始) tomcat源码分析(第二篇 tomcat启动过程详解) tomcat源码分析(第三篇 tomcat请求原理解析--Connector源码分析) tomcat源码分析(第四篇 tomcat请求处理原理解析--Container源码分析)转载于:https://www.c…

windwon安装macaca环境

一 安装配置java1.安装java_jdk &#xff0c;安装过程中顺带一起安装jre(1)选择【新建系统变量】--弹出“新建系统变量”对话框&#xff0c;在“变量名”文本框输入“JAVA_HOME”,在“变量值”文本框输入JDK的安装路径&#xff0c; 如“C&#xff1a;/Java/jdk1.6.0_25”(2)在“…

三星要用Exynos 9芯片打造独立VR头显

【天极网VR虚拟现实频道】近期有数据显示&#xff0c;2016年全球VR虚拟现实设备的出货量达到了630万台&#xff0c;其中三星Gear VR以451万台出货量称霸全球VR市场&#xff0c;占据高达71%的市场份额。不过三星的眼光并不局限于手机VR设备&#xff0c;这家公司正在计划推出一款…

消息队列常见的 5 个应用场景

消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合&#xff0c;异步消息&#xff0c;流量削锋等问题&#xff0c;实现高性能、高可用、可伸缩和最终一致性架构。使用较多的消息队列有ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ、RocketMQ。 消息队列应用场…

Leetcode之二叉树(前200道)

持续更新... github链接&#xff1a;https://github.com/x2mercy/Leetcode_Solution 为什么括号200道呢&#xff01;因为准备按照200道这样的周期刷&#xff0c;每200道刷两遍&#xff0c;第一遍按难度刷&#xff0c;第二遍按类别刷&#xff01; 先整理binarytree这一类别也是因…

在ARM Linux下使用GPIO模拟SPI时序详解

Author&#xff1a;杨正 Data&#xff1a;2016.1.1 Mail&#xff1a;yz2012wwgmail.com一、 概述 SPI是英文SerialPeripheral Interface的缩写&#xff0c;顾名思义就是串行外围设备接口。SPI是一种高速、全双工、同步通信总线&#xff0c;标准的SPI有4个引脚&#xff…

git clone时出现 error:inflate:data stream error(incorrect data check)

git clone时出现 error:inflate:data stream error(incorrect data check) fatal:serrious inflate inconsistency fatal:index-pack failed 经了解&#xff0c;此问题是遗留问题&#xff0c;之前是因为公司对gitlab服务器进行数据迁移而引起这种git clone失败的原因&#xff0…

CentOS 7.5 使用 yum 安装 Kubernetes 集群(二)

一、安装方式介绍 1、yum 安装 目前CentOS官方已经把Kubernetes源放入到自己的默认 extras 仓库里面&#xff0c;使用 yum 安装&#xff0c;好处是简单&#xff0c;坏处也很明显&#xff0c;需要官方更新 yum 源才能获得最新版本的软件&#xff0c;而所有软件的依赖又不能自己指…

zbb20171108 tomcat 性能优化

原文地址http://www.cnblogs.com/NiceTime/p/6665416.html 1)内存优化(调整配置堆的大小&#xff0c;修改文件&#xff1a;catalina.sh) JAVA_OPTS"-Djava.awt.headlesstrue -Dfile.encodingUTF-8 -server -XX:MinHeapFreeRatio80 -XX:MaxHeapFreeRatio80 -XX:ThreadStack…

深入理解pthread_cond_wait、pthread_cond_signal

man pthread_cond_wait的解释 LINUX环境下多线程编程肯定会遇到需要条件变量的情况&#xff0c;此时必然要使用pthread_cond_wait()函数。但这个函数的执行过程比较难于理解。 pthread_cond_wait()的工作流程如下&#xff08;以MAN中的EXAMPLE为例&#xff09;&#xff1a;…