码迷,mamicode.com
首页 > 其他好文 > 详细

@XStreamAlias使用

时间:2017-12-17 18:14:20      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:com   too   通过   xstream   序列   multi   port   转换   not   

@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使用

标签:com   too   通过   xstream   序列   multi   port   转换   not   

原文地址:http://www.cnblogs.com/rinack/p/8052560.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!