您好,欢迎访问一九零五行业门户网

JAVAbean与XML互转的利器-XStream的代码详解

xstream是大名鼎鼎的thought works下的一个开源项目, 主要功能是提供java bean 和xml文本之间的转换,另外还提供java bean和json之间的转换,这个不在本次讨论的范围内。 
在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的代码详解的详细内容。
其它类似信息

推荐信息