在JAVA1.5今后XSteam也支撑了annotation。 这时候就只要在JAVA BEAN中增加多少annotation就能够了,固然假如不允许修正JAVA bean, 那XStream也供应register的体式格局,也是很简单的。经由过程几个方面细致申明一下:
1.基础转换;
2.运用别号;
3.处置惩罚属性;
4.处置惩罚list范例属性;
5.属性不介入转换;
1. 基础转换
这是一个一般的JAVA bean:
package xstreamTest; public class Person { private String name; private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } public String getName() { return this.name; } }
转换代码是如许的:
XStream xstream = new XStream(); Person person = new Person(); person.setName("pli"); person.setAge(18); System.out.println(xstream.toXML(person));
我们获得了如许的结果:
<xstreamTest.Person> <name>pli</name> <age>18</age> </xstreamTest.Person>
然则 有时候根标签不想运用包途径,怎样搞呢,运用别号
2. 起别号
仆人我们愿望将“xstreamTest.Person” 这个稀里糊涂的element标签改成“person”我们应当这么做。
package xstreamTest; @XStreamAlias("person") public class Person { private String name; private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } public String getName() { return this.name; } }
而实行代码会变成如许:
XStream xstream = new XStream(); xstream.autodetectAnnotations(true); Person person = new Person(); person.setName("pli"); person.setAge(18); System.out.println(xstream.toXML(person));
如许我们就获得了想要的:
<person> <name>pli</name> <age>18</age> </person>
3. 处置惩罚属性
假如想要将JAVA bean中的“age”属性作为XML中person标签的一个attribute该怎么办呢。
这里引见别的一个annotation:@XStreamAsAttribute, 我们的JAVA bean变成了如许:
@XStreamAlias("person") public class Person { private String name; @XStreamAsAttribute private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } public String getName() { return this.name; } }
结果是如许的:
<person age="18"> <name>pli</name> </person>
4. 处置惩罚List
假如JAVA bean中有List是什么情况呢。
@XStreamAlias("person") public class Person { private String name; @XStreamAsAttribute private int age; List<String> girlFriends; public List<String> getGirlFriends() { return girlFriends; } public void setGirlFriends(List<String> girlFriends) { this.girlFriends = girlFriends; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } public String getName() { return this.name; } }
直接转换我们会获得如许的结果:
<person age="18"> <name>pli</name> <girlFriends> <string>YuanYuanGao</string> <string>QiShu</string> <string>BoZhiZhang</string> </girlFriends> </person>
XStream在这里供应了一个@XStreamImplicit(itemFieldName=***)的annotation来满足用户想将List的根节点去掉和转变列表名字的需求,对应到我们的例子上就是去掉<girlFriends>标签和转变"<string>".我们来看看结果。
@XStreamAlias("person") public class Person { private String name; @XStreamAsAttribute private int age; @XStreamImplicit(itemFieldName="girl") List<String> girlFriends; public List<String> getGirlFriends() { return girlFriends; } public void setGirlFriends(List<String> girlFriends) { this.girlFriends = girlFriends; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } public String getName() { return this.name; } }
结果是如许:
<person age="18"> <name>pli</name> <girl>YuanYuanGao</girl> <girl>QiShu</girl> <girl>BoZhiZhang</girl> </person>
5. 疏忽属性
假如在JAVA bean中有些属性不想被序列化,XStream供应了处理这个需求的annotation: @XStreamOmitField
比如说不想讲girlfriends这个List序列化
@XStreamAlias("person") public class Person { private String name; @XStreamAsAttribute private int age; @XStreamImplicit(itemFieldName="girl") @XStreamOmitField List<String> girlFriends; public List<String> getGirlFriends() { return girlFriends; } public void setGirlFriends(List<String> girlFriends) { this.girlFriends = girlFriends; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } public String getName() { return this.name; } }
以上就是JAVAbean与XML互转的利器-XStream的代码详解的细致内容,更多请关注ki4网别的相干文章!