加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

@XStreamAlias使用

发布时间:2020-12-16 05:18:17 所属栏目:百科 来源:网络整理
导读:@XStreamAlias使用 一、 特点: 简化的API; 无映射文件; 高性能,低内存占用; 整洁的XML; 不需要修改对象;支持内部私有字段,不需要setter/getter方法 提供序列化接口; 自定义转换类型策略; 二、 使用场景 Transport转换 Persistence 持久化对象 Configuration

@XStreamAlias使用

一、 特点:

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

二、 使用场景

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

Interface服务之间XML消息的交互

三、 代码样例

请求类:

package xstream;

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);

}

}

响应类

package xstream;

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工具类

package 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 要转换为beanxml

* @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);

}

}

测试类

package xstream;

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)。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读