XStream的使用说明
往期记录
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使用详解