zoukankan      html  css  js  c++  java
  • @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)。

  • 相关阅读:
    神兽保佑-代码无BUG
    HDU 1022 Train Problem I (数据结构 —— 栈)
    iOS开发
    漫谈程序猿系列:无BUG不生活
    王立平--Unity破解
    java远程调用rmi入门实例
    高仿美团iOS版,版本5.7
    JAVA日志系统
    读《互联网创业password》之随想
    解决iOS空指针数据的问题
  • 原文地址:https://www.cnblogs.com/rinack/p/8052560.html
Copyright © 2011-2022 走看看