zoukankan      html  css  js  c++  java
  • SpringBoot XStream整合

    XStream使用

    XStream简介

    Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。Xstream也可以将JavaBean序列化成Json或反序列化,使用非常方便。
    

    XStream使用案例1

    1. 添加依赖
    <!--xml与bean相互转换-->
    <dependency>
        <groupId>com.thoughtworks.xstream</groupId>
        <artifactId>xstream</artifactId>
        <version>1.4.10</version>
    </dependency>
    
    1. 创建没有添加任何XStream注释的实体类
    package com.example.demo.entity;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    /**
     * @author xzy
     * @date 2020-03-16 21:14
     * 说明:玩具球
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Ball {
        /**
         * 颜色
         */
        private String color;
        /**
         * 价格
         */
        private Double price;
    }
    
    package com.example.demo.entity;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import java.util.List;
    
    /**
     * @author xzy
     * @date 2020-03-16 21:13
     * 说明:猫
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Cat {
        /**
         * 名字
         */
        private String name;
        /**
         * 年龄
         */
        private Integer age;
        /**
         * 拥有的玩具球
         */
        private List<Ball> balls;
    }
    
    1. 创建Java对象,使用XStream将对象转换成XML
    package com.example.demo.service;
    
    import com.example.demo.entity.Ball;
    import com.example.demo.entity.Cat;
    import com.thoughtworks.xstream.XStream;
    
    import java.io.FileOutputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author xzy
     * @date 2020-03-16 21:17
     * 说明:
     */
    public class Test {
        public static void main(String[] args) throws Exception {
            List<Ball> balls = new ArrayList<>(2);
            balls.add(new Ball("red", 19.0));
            balls.add(new Ball("yellow", 30.0));
            Cat cat = new Cat("胖子", 1, balls);
    
            FileOutputStream fileOutputStream = new FileOutputStream("E:\Program Code\Java\xstream\src\main\resources\cat.xml");
            XStream xstream = new XStream();
            xstream.toXML(cat,fileOutputStream);
        }
    }
    

    转换结果为:

    <com.example.demo.entity.Cat>
      <name>胖子</name>
      <age>1</age>
      <balls>
        <com.example.demo.entity.Ball>
          <color>red</color>
          <price>19.0</price>
        </com.example.demo.entity.Ball>
        <com.example.demo.entity.Ball>
          <color>yellow</color>
          <price>30.0</price>
        </com.example.demo.entity.Ball>
      </balls>
    </com.example.demo.entity.Cat>
    

    XStream使用案例2——@XStreamAlias()注解

    1. 简单说明

    Alias翻译过来就是“化名“、”别名“的意思,确实@XStreamAlias()注解的作用就是为有元素起别名。

    1. 为实体类添加@XStreamAlias()注解
    package com.example.demo.entity;
    
    import com.thoughtworks.xstream.annotations.XStreamAlias;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import java.util.List;
    
    /**
     * @author xzy
     * @date 2020-03-16 21:13
     * 说明:猫
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @XStreamAlias("cat")
    public class Cat {
        /**
         * 名字
         */
        @XStreamAlias("catName")
        private String name;
        /**
         * 年龄
         */
        @XStreamAlias("catAge")
        private Integer age;
        /**
         * 拥有的玩具球
         */
        @XStreamAlias("catBalls")
        private List<Ball> balls;
    }
    
    package com.example.demo.entity;
    
    import com.thoughtworks.xstream.annotations.XStreamAlias;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    /**
     * @author xzy
     * @date 2020-03-16 21:14
     * 说明:玩具球
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @XStreamAlias("ball")
    public class Ball {
        /**
         * 颜色
         */
        @XStreamAlias("ballColor")
        private String color;
        /**
         * 价格
         */
        @XStreamAlias("ballPrice")
        private Double price;
    }
    
    1. 调用XStream类的processAnnotations()方法,选择激活哪些类的XStream注解
    package com.example.demo.service;
    
    import com.example.demo.entity.Ball;
    import com.example.demo.entity.Cat;
    import com.thoughtworks.xstream.XStream;
    
    import java.io.FileOutputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author xzy
     * @date 2020-03-16 21:17
     * 说明:
     */
    public class Test {
        public static void main(String[] args) throws Exception {
            List<Ball> balls = new ArrayList<>(2);
            balls.add(new Ball("red", 19.0));
            balls.add(new Ball("yellow", 30.0));
            Cat cat = new Cat("胖子", 1, balls);
    
            FileOutputStream fileOutputStream = new FileOutputStream("E:\Program Code\Java\xstream\src\main\resources\cat.xml");
            XStream xstream = new XStream();
            /**
             * 需要明确指出,哪个类的XStream注解需要被激活
             */
            xstream.processAnnotations(Ball.class);
            //xstream.processAnnotations(Cat.class);
    
            xstream.toXML(cat, fileOutputStream);
        }
    }
    

    上面的代码只激活了,Ball类中的XStream注解,执行后生成的xml为:

    <com.example.demo.entity.Cat>
      <name>胖子</name>
      <age>1</age>
      <balls>
        <ball>
          <ballColor>red</ballColor>
          <ballPrice>19.0</ballPrice>
        </ball>
        <ball>
          <ballColor>yellow</ballColor>
          <ballPrice>30.0</ballPrice>
        </ball>
      </balls>
    </com.example.demo.entity.Cat>
    

    可以发现,只有Ball类中的@XStreamAlias()注解起到了作用。现在将Cat类的XStream注解也激活,执行代码,生成的xml为:

    <cat>
      <catName>胖子</catName>
      <catAge>1</catAge>
      <catBalls>
        <ball>
          <ballColor>red</ballColor>
          <ballPrice>19.0</ballPrice>
        </ball>
        <ball>
          <ballColor>yellow</ballColor>
          <ballPrice>30.0</ballPrice>
        </ball>
      </catBalls>
    </cat>
    

    XStream使用案例3——@XStreamAsAttribute()注解

    1. 简单说明

    @XStreamAsAttribute用于将类中某个成员作为父节点的属性输出

    1. 在Cat类中添加注解
    package com.example.demo.entity;
    
    import com.thoughtworks.xstream.annotations.XStreamAlias;
    import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import java.util.List;
    
    /**
     * @author xzy
     * @date 2020-03-16 21:13
     * 说明:猫
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @XStreamAlias("cat")
    public class Cat {
        /**
         * 名字
         */
        @XStreamAsAttribute//将name变为父节点的属性
        @XStreamAlias("catName")
        private String name;
        /**
         * 年龄
         */
        @XStreamAlias("catAge")
        private Integer age;
        /**
         * 拥有的玩具球
         */
        @XStreamAlias("catBalls")
        private List<Ball> balls;
    }
    
    1. 生成xml
    <cat catName="胖子">
      <catAge>1</catAge>
      <catBalls>
        <ball>
          <ballColor>red</ballColor>
          <ballPrice>19.0</ballPrice>
        </ball>
        <ball>
          <ballColor>yellow</ballColor>
          <ballPrice>30.0</ballPrice>
        </ball>
      </catBalls>
    </cat>
    

    XStream使用案例4——@XStreamImplicit()注解

    1. 简单说明

    @XStreamImplict()注解常用于集合类型元素,前面的例子中,Cat类中的ball属性就是一个集合,最终生成的xml中catName、catAge以及catBalls是同级标签,如果我们想去除catBalls标签,将catBalls下的子标签变成与catName和catAge同级,我们就可以使用@XStreamImplict()注解。

    1. 在Cat类中添加注解
    package com.example.demo.entity;
    
    import com.thoughtworks.xstream.annotations.XStreamAlias;
    import com.thoughtworks.xstream.annotations.XStreamImplicit;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    import java.util.List;
    
    /**
     * @author xzy
     * @date 2020-03-16 21:13
     * 说明:猫
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @XStreamAlias("cat")
    public class Cat {
        /**
         * 名字
         */
        @XStreamAlias("catName")
        private String name;
        /**
         * 年龄
         */
        @XStreamAlias("catAge")
        private Integer age;
        /**
         * 拥有的玩具球
         */
        @XStreamImplicit//去除catBalls标签
        @XStreamAlias("catBalls")
        private List<Ball> balls;
    }
    
    1. 生成的xml
    <cat>
      <catName>胖子</catName>
      <catAge>1</catAge>
      <ball>
        <ballColor>red</ballColor>
        <ballPrice>19.0</ballPrice>
      </ball>
      <ball>
        <ballColor>yellow</ballColor>
        <ballPrice>30.0</ballPrice>
      </ball>
    </cat>
    
  • 相关阅读:
    水题大战Vol.3 B. DP搬运工2
    火题小战 C. 情侣?给我烧了!
    火题小战 B. barbeque
    火题小战 A.玩个球
    P6087 [JSOI2015]送礼物 01分数规划+单调队列+ST表
    NOI2020D1T1美食家
    Java 的随机数
    MySQL 配置文件的配置
    NOIP2020准(ge)备(zi)日记
    android开发EditText禁止输入中文密码的解决方法
  • 原文地址:https://www.cnblogs.com/XiaoZhengYu/p/12507531.html
Copyright © 2011-2022 走看看