栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > 其他 > xml语言

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

xml语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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));

我们得到了这样的结果:

    pli    18  

但是 有时候根标签不想使用包路径,如何搞呢,使用别名

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));

这样我们就得到了想要的:

    pli    18  

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;      }  }

结果是这样的:

    pli  

4. 处理List
如果JAVA bean中有List是什么情形呢。

@XStreamAlias("person")  public class Person {      private String name;      @XStreamAsAttribute      private int age;            List girlFriends;            public List getGirlFriends() {          return girlFriends;      }        public void setGirlFriends(List 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;      }  }

直接转换我们会得到这样的结果:

    pli          YuanYuanGao      QiShu      BoZhiZhang      

XStream在这里提供了一个@XStreamImplicit(itemFieldName=***)的annotation来满足用户想将List的根节点去掉和改变列表名字的需求,对应到我们的例子上就是去掉标签和改变"".我们来看看效果。

@XStreamAlias("person")  public class Person {      private String name;      @XStreamAsAttribute      private int age;      @XStreamImplicit(itemFieldName="girl")      List girlFriends;            public List getGirlFriends() {          return girlFriends;      }        public void setGirlFriends(List 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;      }  }

结果是这样:

    pli    YuanYuanGao    QiShu    BoZhiZhang  

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 girlFriends;            public List getGirlFriends() {          return girlFriends;      }        public void setGirlFriends(List 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的代码详解的详细内容,更多请关注考高分网其它相关文章!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/794455.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号