@XStreamAlias使用
@XStreamAlias使用
一、 特点:
简化的API;
无映射文件;
高性能,低内存占用;
整洁的XML;
不需要修改对象;支持内部私有字段,不需要setter/getter方法
提供序列化接口;
自定义转换类型策略;
二、 使用场景
Transport转换
Persistence 持久化对象
Configuration 配置
Unit Tests 单元测试
Interface服务之间XML消息的交互
三、 代码样例
请求类:
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle; import com.thoughtworks.xstream.annotations.XStreamAlias; @XStreamAlias("Response")
public class RequestTest { @XStreamAlias("returncode")
private String returnCode; @XStreamAlias("returnmessage")
private String returnMessage; @XStreamAlias("status")
private int status; @XStreamAlias("time")
private String reqTime; public String getReturnCode() {
return returnCode;
} public void setReturnCode(String returnCode) {
this.returnCode = returnCode;
} public String getReturnMessage() {
return returnMessage;
} public void setReturnMessage(String returnMessage) {
this.returnMessage = returnMessage;
} public int getStatus() {
return status;
} public void setStatus(int status) {
this.status = status;
} public String getReqTime() {
return reqTime;
} public void setReqTime(String reqTime) {
this.reqTime = reqTime;
} @Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
}
}
响应类
import java.sql.Timestamp; import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle; import com.thoughtworks.xstream.annotations.XStreamAlias; @XStreamAlias("Response")
public class ResponseTest { @XStreamAlias("returncode")
private int resultCode; @XStreamAlias("time")
private Timestamp time; @XStreamAlias("returnmessage")
private String resultMessage; @XStreamAlias("status")
private int state; @Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
} }
Xstream工具类
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver; public class XstreamUtil { /**
* 将bean转换为xml
* @param obj 转换的bean
* @return bean转换为xml
*/
public static String objectToXml(Object obj) {
XStream xStream = new XStream(); //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);
}
}
测试类
public class XStreamTest {
public static void main(String[] args) {
RequestTest requestTest = new RequestTest();
requestTest.setReturnCode("200");
requestTest.setReturnMessage("ok");
requestTest.setStatus(200);
requestTest.setReqTime("2013-09-22 00:00:00");
System.out.println(requestTest);
String request = XstreamUtil.objectToXml(requestTest);
System.out.println(request); ResponseTest responseTest =XstreamUtil.xmlToObject(request, ResponseTest.class);
System.out.println(responseTest);
}
}
输出:
xstream.RequestTest@1fb8ee3[
returnCode=200
returnMessage=ok
status=200
reqTime=2013-09-22 00:00:00
]
<Response>
<returncode>200</returncode>
<returnmessage>ok</returnmessage>
<status>200</status>
<time>2013-09-22 00:00:00</time>
</Response>
xstream.ResponseTest@19dfbff[
resultCode=200
time=2013-09-22 00:00:00.0
resultMessage=ok
state=200
]
四、 总结
1. @XStreamAlias("message") 别名注解 。
2. 使用注解序列化、反序列化,只要别名一样、字段不需要是同一类型(通过JAVA的API可以转换),不需要是同一个类,这为接口之间的交互提供了极大的方便。
3. 简化了API,不需要单独写解析xml的API。
4. toString方法使用ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE)。
@XStreamAlias使用的更多相关文章
- Java -- XStreamAlias 处理节点中的属性和值
XStreamAlias 可以把objec和xml相互转换,但是有时候节点带有属性和值就需要特殊处理下: <?xml version="1.0" encoding=" ...
- java与xml转换 -- XStreamAlias
@XStreamAlias 1.特点 简化的API; 无映射文件; 高性能,低内存占用; 整洁的XML; 不需要修改对象;支持内部私有字段,不需要setter/getter方法 提供序列化接口; 自定 ...
- xml与java对象转换 -- XStreamAlias
@XStreamAlias使用 一. 特点: 简化的API; 无映射文件; 高性能,低内存占用; 整洁的XML; 不需要修改对象;支持内部私有字段,不需要setter/getter方法 提供序列化接口 ...
- XStream xml 解析框架使用笔记
1. xml的标签可以映射为类.类成员变量 2. 有子标签的标签映射为类,没有子标签的便签映射为类成员变量 3. 类名.类成员变量名如与标签名不一致需要通过注解或代码设置别名 // 类名 @XStre ...
- 简单Java类与XML之间的转换
需要的jar包:xmlpull_1_0_5.jar,xstream-1.4.1.jar) 1.工具类XstreamUtil package com.learn.util; import com.tho ...
- XStream简单入门
简单的讲,XStream 涉及的就五个知识点:详情参考 官网 混叠,注解,转换器,对象流和操作json! 下面就用几个简单的例子来实现上述五个知识点! 基本步骤: 第1步:创建XStream对象. 通 ...
- Xstream解析XML
<oschina> <catalog>1</catalog> <newsCount>0</newsCount> <pagesize&g ...
- PullToRefreshGridView刷新加载2
@XStreamAlias("result")public class Myresult { @XStreamImplicit(itemFieldName="item&q ...
- XStream学习笔记
XStream 所需jar包: xstream-1.3.jar xpp3_min-1.1.4c.jar xmlpull-1.1.3.1.jar 目录: 1.注解去除,标签中带有包名的节点 2.注解修改 ...
随机推荐
- [Android Studio] Android Studio如何查看branch列表及切换branch(转载)
转载地址:http://blog.csdn.net/hyr83960944/article/details/36185231 用Git bash去切换相信大家都会,一行命令行搞定的问题.而在Andro ...
- [Android Studio] Android Studio使用教程(二)
以下是本次Google I/O大会发布的IDE Android Studio使用教程第二篇: 在Android Studio使用教程(一)中简要介绍了Android Studio的基本使用,包括安装. ...
- ORA-00600 qerpxInitialize
今天早上巡检又见bug: A select query using a connect-by clause executing using parallel query may fail with O ...
- Windows 批处理 ping 某个网段
原文: https://blog.csdn.net/leuxcn/article/details/51288248 ------------------------------------------ ...
- [React] Safely setState on a Mounted React Component through the useEffect Hook
In the class version of this component, we had a method called safeSetState which would check whethe ...
- 用C#读取图片的EXIF信息的方法
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Dr ...
- .NET破解之繁星代码生成器
本教程只能用于学习研究,不可进行任何商业用途.如有使用,请购买正版,尊重他人劳动成果和知识产权! 对象:繁星代码生成器0.96 环境:Win7 x64 工具:exeinfoPE(查壳).de4dot ...
- 如何使用angularjs实现抓取页面内容
<html ng-app="myApp"> <head> <title>angularjs-ajax</title> <scr ...
- eclipse因为js validator无法通过导致build workspace失败
eclipse编译工程时时会validator js的errors和warnings,对于一些小型的项目,这当然没任何问题. 但是对于那些拥有大量js文件的web工程,js warnings通常会达到 ...
- 关于索引的sql语句优化之降龙十八掌
1 前言 客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能急剧下降,小型机idle所剩无几,应用服务器断连.超时,严重影响业务的正 ...