XStream的使用说明4

往期记录

XStream的使用说明1
XStream的使用说明2
XStream的使用说明3

Xstream注解的使用

准备工作

设置Xstream应用注解:
xstream.processAnnotations(Person.class);//应用Person类的注解

xstream.autodetectAnnotations(true);//自动检测注解

1. 设置Xstream应用注解

代码示例:
Person类

package com.vincient.test.xstreamDemo;

import com.thoughtworks.xstream.annotations.XStreamAlias;

import java.util.Arrays;
import java.util.List;

/**
 * @Author: Vincient
 * @Description:
 * @Date: 2018/十一月/05
 **/
@XStreamAlias("人")
public class Person1 {
    @XStreamAlias("姓名")
    private String name;
    @XStreamAlias("年龄")
    private int age;
    @XStreamAlias("朋友")
    private List friends;

    public Person1(String name, int age, List friends) {
        this.name = name;
        this.age = age;
        this.friends = friends;
    }

    public Person1() {
        super();
    }

    @Override
    public String toString() {
        return "Person1{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", friends=" + friends +
                '}';
    }
}

测试类

package com.vincient.test.xstreamDemo;

import com.thoughtworks.xstream.XStream;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: Vincient
 * @Description:
 * @Date: 2018/十一月/06
 **/
public class Test10 {
    public static void main(String[] args) {
        List<String> friends = new ArrayList<>();
        friends.add("李四");
        friends.add("王五");
        friends.add("赵六");
        Person1 bean = new Person1("张三", 19, friends);
        XStream xStream = new XStream();
        xStream.processAnnotations(Person1.class);
//        xStream.autodetectAnnotations(true);
        String xml = xStream.toXML(bean);
        System.out.println(xml);
        bean = (Person1) xStream.fromXML(xml);
        System.out.println(bean);
    }
}

测试结果

<人>
  <姓名>张三</姓名>
  <年龄>19</年龄>
  <朋友>
    <string>李四</string>
    <string>王五</string>
    <string>赵六</string>
  </朋友>
</人>
Person1{name='张三', age=19, friends=[李四, 王五, 赵六]}

3.省略集合根节点:@XStreamImplicit

代码示例
javabean

package com.vincient.test.xstreamDemo;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;

import java.util.Arrays;
import java.util.List;

/**
 * @Author: Vincient
 * @Description:
 * @Date: 2018/十一月/05
 **/

public class Person1 {

    private String name;

    private int age;
    @XStreamImplicit(itemFieldName = "朋友")
    private List friends;

    public Person1(String name, int age, List friends) {
        this.name = name;
        this.age = age;
        this.friends = friends;
    }

    public Person1() {
        super();
    }

    @Override
    public String toString() {
        return "Person1{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", friends=" + friends +
                '}';
    }
}

执行结果

<com.vincient.test.xstreamDemo.Person1>
  <name>张三</name>
  <age>19</age>
  <朋友 class="string">李四</朋友>
  <朋友 class="string">王五</朋友>
  <朋友 class="string">赵六</朋友>
</com.vincient.test.xstreamDemo.Person1>
Person1{name='张三', age=19, friends=[李四, 王五, 赵六]}

4.把字段节点设置成属性:@XStreamAsAttribute

javabean

package com.vincient.test.xstreamDemo;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamImplicit;

import java.util.Arrays;
import java.util.List;

/**
 * @Author: Vincient
 * @Description:
 * @Date: 2018/十一月/05
 **/

public class Person1 {

    @XStreamAsAttribute
    private String name;

    @XStreamAsAttribute
    private int age;

    private List friends;

    public Person1(String name, int age, List friends) {
        this.name = name;
        this.age = age;
        this.friends = friends;
    }

    public Person1() {
        super();
    }

    @Override
    public String toString() {
        return "Person1{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", friends=" + friends +
                '}';
    }
}

测试结果

<com.vincient.test.xstreamDemo.Person1 name="张三" age="19">
  <friends>
    <string>李四</string>
    <string>王五</string>
    <string>赵六</string>
  </friends>
</com.vincient.test.xstreamDemo.Person1>
Person1{name='张三', age=19, friends=[李四, 王五, 赵六]}

5. 隐藏字段:@XStreamOmitField

javabean

package com.vincient.test.xstreamDemo;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import com.thoughtworks.xstream.annotations.XStreamOmitField;

import java.util.Arrays;
import java.util.List;

/**
 * @Author: Vincient
 * @Description:
 * @Date: 2018/十一月/05
 **/

public class Person1 {

    private String name;

    private int age;

    @XStreamOmitField
    private List friends;

    public Person1(String name, int age, List friends) {
        this.name = name;
        this.age = age;
        this.friends = friends;
    }

    public Person1() {
        super();
    }

    @Override
    public String toString() {
        return "Person1{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", friends=" + friends +
                '}';
    }
}

测试结果

<com.vincient.test.xstreamDemo.Person1>
  <name>张三</name>
  <age>19</age>
</com.vincient.test.xstreamDemo.Person1>
Person1{name='张三', age=19, friends=null}

6. 设置转换器:@XStreamConverter

javabean

package com.vincient.test.xstreamDemo;

import com.thoughtworks.xstream.annotations.XStreamConverter;
import com.thoughtworks.xstream.converters.basic.BooleanConverter;


/**
 * @Author: Vincient
 * @Description:
 * @Date: 2018/十一月/05
 **/

public class Person2 {

    private String name;
    private int age;
    @XStreamConverter(value = BooleanConverter.class, booleans = {false}, strings = {"男", "女"})
    private boolean sex;

    public Person2(String name, int age, boolean sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]";
    }
}

测试结果

<com.vincient.test.xstreamDemo.Person2>
  <name>张三</name>
  <age>19</age>
  <sex>男</sex>
</com.vincient.test.xstreamDemo.Person2>
Person [name=张三, age=19, sex=true]

注意
在使用@XStreamConverter时,对应的XStream版本号为1.4.7,使用低版本XStream的可能会报错


本文参考:
【1】XStream使用详解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值