zoukankan      html  css  js  c++  java
  • 利用xstream处理java中的集合类

    利用xstream处理java中的集合类
             越来越发现xstream的好用了,在处理很多麻烦事情时可以很简单的搞定,比如本来需要几个字段来保存的服务器配置信息,现在只需要写一个pojo表示服务器的config information,然后利用xstream将它变为xml,用一个字段就可以保存在数据库中,方便而且高效。
             但是在工作中,发现有时候pojo中需要用到java中的集合类,如ArrayList时,稍微有那么一点麻烦,今天特总结了一下,有不对之处希望大家批评指正。
    一.pojo中使用数组
    1.先写一个表示通许录的pojo
    package chb.xml;

    /**通讯录
     * 
    @author chb
     *
     
    */

    public class AdressList {
        String username;
    //用户名
        String[] telphone;//联系方式
        public String[] getTelphone() {
            
    return telphone;
        }

        
    public void setTelphone(String[] telphone) {
            
    this.telphone = telphone;
        }

        
    public String getUsername() {
            
    return username;
        }

        
    public void setUsername(String username) {
            
    this.username = username;
        }

    }
    2.利用xstream将一个AdressList对象转化成xml
            XStream xstream = new XStream(new DomDriver());
            AdressList adressList
    =new AdressList();
            adressList.setUsername(
    "chb");
            String[] tel
    ={"13811071xxx","0391-6792xxx"};
            adressList.setTelphone(tel);
            String obj_xml
    =xstream.toXML(adressList);
            System.out.println(obj_xml);
    3.输出结果为:
    <chb.xml.AdressList>
      
    <username>chb</username>
      
    <telphone>
        
    <string>13811071xxx</string>
        
    <string>0391-6792xxx</string>
      
    </telphone>
    </chb.xml.AdressList>
    4.如果觉得上面这段xml的root节点<
    chb.xml.AdressList>不爽的话,可以利用xstream的annotations来搞定。只需要改动两个地方即可:

    package chb.xml;

    import com.thoughtworks.xstream.annotations.XStreamAlias;

    /**通讯录
     * 
    @author chb
     *
     
    */

    @XStreamAlias(
    "adressList")
    public class AdressList {
        String username;
    //用户名
        String[] telphone;//联系方式
    然后在调用时更改如下:
            XStream xstream = new XStream(new DomDriver());
            Annotations.configureAliases(xstream, AdressList.
    class);
            AdressList adressList
    =new AdressList();
            adressList.setUsername(
    "chb");
            String[] tel
    ={"13811071xxx","0391-6792xxx"};
            adressList.setTelphone(tel);
            String obj_xml
    =xstream.toXML(adressList);
            System.out.println(obj_xml);
    最后输出结果为:
    <adressList>
      
    <username>chb</username>
      
    <telphone>
        
    <string>13811071xxx</string>
        
    <string>0391-6792xxx</string>
      
    </telphone>
    </adressList>
    关于xstream的
    Annotations用法可以参考:http://xstream.codehaus.org/annotations-tutorial.html
    二.pojo中使用ArrayList,ArrayList中装着另外的一个pojo
    1.创建一个pojo
    package chb.xml;

    import java.util.ArrayList;

    import com.thoughtworks.xstream.annotations.XStreamAlias;

    /**通讯录
     * 
    @author chb
     *
     
    */

    @XStreamAlias(
    "adressList")
    public class AdressList {
        String username;
    //用户名
        ArrayList<EmailAdress> emailList;//电子邮件
        public String getUsername() {
            
    return username;
        }

        
    public void setUsername(String username) {
            
    this.username = username;
        }

        
    public ArrayList<EmailAdress> getEmailList() {
            
    return emailList;
        }

        
    public void setEmailList(ArrayList<EmailAdress> emailList) {
            
    this.emailList = emailList;
        }

    }

    2.emailList变量指向的EmailAdress对象为:
    package chb.xml;

    import com.thoughtworks.xstream.annotations.XStreamAlias;

    /**有点类似于javax.mail.internet.InternetAddress
     * 
     * 如:chb <hbcui1984@163.com>
     * 
     * 
    @author chb
     *
     
    */

    @XStreamAlias(
    "email")
    public class EmailAdress {
        
        String person;
    //person
        
        String adress;
    //Adress
        
        
    public String getAdress() {
            
    return adress;
        }

        
    public void setAdress(String adress) {
            
    this.adress = adress;
        }

        
    public String getPerson() {
            
    return person;
        }

        
    public void setPerson(String person) {
            
    this.person = person;
        }

    }

    3.将一个
    AdressList对象转化为对应的pojo
            XStream xstream = new XStream(new DomDriver());
            Annotations.configureAliases(xstream, AdressList.
    class);
            Annotations.configureAliases(xstream, EmailAdress.
    class);
            AdressList adressList
    =new AdressList();
            adressList.setUsername(
    "chb");
            
            ArrayList
    <EmailAdress> emailList=new ArrayList<EmailAdress>();
            
    for(int i=1;i<4;i++){
                EmailAdress email
    =new EmailAdress();
                email.setPerson(
    "user"+i);
                email.setAdress(
    "user"+i+"@163.com");
                emailList.add(email);
            }

            adressList.setEmailList(emailList);
            String obj_xml
    =xstream.toXML(adressList);
            System.out.println(obj_xml);
    4.输出结果为:
    <adressList>
      
    <username>chb</username>
      
    <emailList>
        
    <email>
          
    <person>user1</person>
          
    <adress>user1@163.com</adress>
        
    </email>
        
    <email>
          
    <person>user2</person>
          
    <adress>user2@163.com</adress>
        
    </email>
        
    <email>
          
    <person>user3</person>
          
    <adress>user3@163.com</adress>
        
    </email>
      
    </emailList>
    </adressList>

    三.用其他集合类的方法类似,这里就不举例了。

  • 相关阅读:
    git修改远程仓库地址
    Result Maps collection already contains value for com.miniprogram.meirong.user.dao.UserMapper.BaseResultMap
    查看微信小程序的appID和secret
    Springboot配置fastjson开发
    本地仓库上传码云
    总结分析Java常见的四种引用
    equals和hashcode 和 ==方法说明
    关于Class.forName(className).newInstance()介绍
    Java枚举
    抽象工厂模式-与-工厂方法模式区别
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330264.html
Copyright © 2011-2022 走看看