(5)xstream的注解方式的使用

在工作中,发下xml的解析其实用得非常的少,实际在工作中一般用xstream的第三方的jar包比较多,这个jar可以很方便的实现xml到javabeans的转换,使用起来非常的简单方便

参考学习文档:http://x-stream.github.io/tutorial.html
建议可以先参考文档中Tutorials教程部分,xstream可以使用java的编程方式来给实体列别名,也可以使用注解的方式来实现别名

1.xstream的注解方式的使用

要求: 使用xstream的api,完成xml到javabean的转换以及javabean到json的转换

  • 依赖的jar包

jettison为可以实现json到javabean的转换方式

    
      com.thoughtworks.xstream
      xstream
      1.4.9
    
  
      org.codehaus.jettison
      jettison
      1.3.7
    
  • beans.xml内容如下:

    
          sunkang
    
    
        sunkang
    

  • javabeans的实体
/**
 * @Project: jdk
 * @description:  javabeans的实体
 * @author: sunkang
 * @create: 2018-10-19 10:42
 * @ModificationHistory who      when       What
 **/

@XStreamAlias("beans")
public class BeansEntity {

    @XStreamImplicit
    public List beans;

    public BeansEntity(List beans) {
        this.beans = beans;
    }

    @Override
    public String toString() {
        return "Beans{" +
                "bean=" + beans +
                '}';
    }
}


@XStreamAlias("bean")
class Bean{
    @XStreamImplicit
    public List properties;

    @XStreamAsAttribute
    public  String id;

    @XStreamAsAttribute
    @XStreamAlias("class")
    public  String clazz;

    public Bean(List properties, String id, String clazz) {
        this.properties = properties;
        this.id = id;
        this.clazz = clazz;
    }

    @Override
    public String toString() {
        return "Bean{" +
                "properties=" + properties +
                ", id='" + id + '\'' +
                ", clazz='" + clazz + '\'' +
                '}';
    }
}

@XStreamAlias("property")
//下面ToAttributedValueConverter的作用是把其他全部变成属性值,指定的为值
@XStreamConverter(value=ToAttributedValueConverter.class, strings={"value"})
class Property{
    @XStreamAsAttribute
    public String name ;

    public  String value;

    public Property(String name, String value) {
        this.name = name;
        this.value = value;
    }

    @Override
    public String toString() {
        return "Property{" +
                "name='" + name + '\'' +
                ", value='" + value + '\'' +
                '}';
    }
}

  • xstream解析
/**
 * @Project: jdk
 * @description:  xstream 实现了xml到javabeans的转换,javabean到json的转换
 * @author: sunkang
 * @create: 2018-10-19 10:38
 * @ModificationHistory who      when       What
 **/
public class XstreamDemo {

    public static void main(String[] args) {

        XStream xStream = new XStream(new DomDriver());
        xStream.processAnnotations(BeansEntity.class);

        Property property1 =new Property("sun","kang");
        Property property2 =new Property("kang","sun");
        Property property3 =new Property("sun2","kang2");
        List properties1 = new ArrayList();
        properties1.add(property1);
        properties1.add(property3);
        List properties2 = new ArrayList();
        properties2.add(property2);

        Bean bean1 = new Bean(properties1,"id1","class1");
        Bean bean2 = new Bean(properties2,"id2","class2");
        List beans = new ArrayList();
        beans.add(bean1);
        beans.add(bean2);
        System.out.println("-------------把java实体转化成xml对象--------------------");
        //把java实体转化成xml对象
        BeansEntity entity = new BeansEntity(beans);
        String xmlMsg = xStream.toXML(entity);
        System.out.println(xmlMsg);


        System.out.println("-------------用xml转化成java实体-------");
        //用xml转化成java实体
         BeansEntity  beansEntity = (BeansEntity) xStream.fromXML(xmlMsg);
         System.out.println(beansEntity);

        System.out.println("-------------实体转化成json--------------------");
        //转化成json ,需要增加  jettison的jar包
        XStream xstreamTojson = new XStream(new JettisonMappedXmlDriver());
        xstreamTojson.setMode(XStream.NO_REFERENCES);
        xstreamTojson.processAnnotations(BeansEntity.class);
        String json = xstreamTojson.toXML(entity);
        System.out.println(json);

        System.out.println("-------------json 转化成java--------------------");
        //json 转化成java
        BeansEntity beansEntity1 = (BeansEntity) xstreamTojson.fromXML(json);
        System.out.println(beansEntity1);
    }
}
  • 输出结果
-------------把java实体转化成xml对象--------------------

  
    kang
    kang2
  
  
    sun
  

-------------用xml转化成java实体-------
Beans{bean=[Bean{properties=[Property{name='sun', value='kang'}, Property{name='sun2', value='kang2'}], id='id1', clazz='class1'}, Bean{properties=[Property{name='kang', value='sun'}], id='id2', clazz='class2'}]}
-------------实体转化成json--------------------
{"beans":{"bean":[{"@id":"id1","@class":"class1","property":[{"@name":"sun","$":"kang"},{"@name":"sun2","$":"kang2"}]},{"@id":"id2","@class":"class2","property":{"@name":"kang","$":"sun"}}]}}
-------------json 转化成java--------------------
Beans{bean=[Bean{properties=[Property{name='sun', value='kang'}, Property{name='sun2', value='kang2'}], id='id1', clazz='class1'}, Bean{properties=[Property{name='kang', value='sun'}], id='id2', clazz='class2'}]}

你可能感兴趣的:((5)xstream的注解方式的使用)