博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XStream中几个注解的含义和用法
阅读量:7135 次
发布时间:2019-06-28

本文共 4915 字,大约阅读时间需要 16 分钟。

转自:http://blog.csdn.net/robert_mm/article/details/8459879

XStream是个很强大的工具,能将java对象和xml之间相互转化。xstream不在意java类中成员变量是私有还是公有,也不在乎是否有默认构造函数。它调用方式也非常简单:从xml对象转化为java对象,使用fromXML()方法;从java对象序列化为xml,toXML()即可,很方便。xstream也支持注解方式,这些都是为了简化输出而设计,下面为大家简单说一下这几个注解的含义和用法。

1. 当没有任何注解情况下

[java] 
 
 
  1. public class Cat {    
  2.     //名字    
  3.     private String name;    
  4.     //大小    
  5.     private Integer age;    
  6.     //玩具球  球具有颜色属性    
  7.     private List<Ball> balls;    
  8.         
  9.     Cat(String name,Integer age,List<Ball> balls){    
  10.         this.name = name;    
  11.         this.age = age;    
  12.         this.balls=balls;    
  13.     }    
  14.     //getter/setter方法 为了赋值使用    

 

其中Ball定义如下:

 

[java] 
 
 
  1. public class Ball {  
  2.     //颜色  
  3.     private String color;  
  4.   
  5.     Ball(String color){  
  6.         this.color = color;  
  7.     }  

 

没有任何注解,输出如下:

 

[java] 
 
 
  1. public static void main(String[] args) throws Exception{  
  2.         //初始化cat  
  3.         List<Ball> balls = new ArrayList<Ball>();  
  4.         balls.add(new Ball("red"));  
  5.         Cat cat = new Cat("馄饨",1,balls);  
  6.         //初始化结束  
  7.         //为了方便查找 将文件制定到D盘cat.xml中  
  8.         FileOutputStream fout = new FileOutputStream("D:/cat.xml");  
  9.         XStream xs = new XStream();  
  10.         xs.toXML(cat,fout);  
  11.     }<span style="font-size:14px;">  
  12. </span>  

得到Cat.xml如下

 

 

[java] 
 
 
  1. <com.timejob.node.Cat>  
  2.   <name>馄饨</name>  
  3.   <age>1</age>  
  4.   <balls>  
  5.     <com.timejob.node.Ball>  
  6.       <color>red</color>  
  7.     </com.timejob.node.Ball>  
  8.   </balls>  
  9. </com.timejob.node.Cat>  

1. @XStreamAlias("cat") 等同于 xstream.alias("cat", Cat.class); 

 

 

[java] 
 
 
  1. @XStreamAlias("cat")  //here   
  2. public class Cat {  
  3.     //名字  
  4.     private String name;  
  5.     //大小  
  6.     private Integer age;  
  7.     //玩具球  球具有颜色属性  
  8.     private List<Ball> balls;  

 

我们需要明确给出,哪个类的注解需要被激活:

 

[java] 
 
 
  1. public static void main(String[] args) throws Exception{  
  2.         //初始化cat  
  3.         List<Ball> balls = new ArrayList<Ball>();  
  4.         balls.add(new Ball("red"));  
  5.         Cat cat = new Cat("馄饨",1,balls);  
  6.         //初始化结束  
  7.         //为了方便查找 将文件制定到D盘cat.xml中  
  8.         FileOutputStream fout = new FileOutputStream("D:/cat.xml");  
  9.         XStream xs = new XStream();  
  10.         //xs.alias("cat", Cat.class); //等同于 @XStreamAlias("cat")  
  11.         xs.processAnnotations(Cat.class);//将Cat.class类上的注解将会使用  
  12.         xs.toXML(cat,fout);  
  13.     }  

当我们在Cat类名使用该注解时,表明该类序列化为xml时,类名com.timejob.node.Cat将替换成cat输出,这样使得xml更清晰简短:

 

 

[java] 
 
 
  1. <cat>  
  2.   <name>馄饨</name>  
  3.   <age>1</age>  
  4.   <balls>  
  5.     <com.timejob.node.Ball>  
  6.       <color>red</color>  
  7.     </com.timejob.node.Ball>  
  8.   </balls>  
  9. </cat>  

2. XStreamAsAttribute 作用是将类内成员作为父节点属性输出,等同于xstream.useAttributeFor(Cat.class, "name")

 

 

[java] 
 
 
  1. @XStreamAlias("cat")  
  2. public class Cat {  
  3.     //名字  
  4.     @XStreamAsAttribute // here  将name作为Cat属性输出在父节点  
  5.     private String name;  
  6.     //大小  
  7.     private Integer age;  
  8.     //玩具球  球具有颜色属性  
  9.     private List<Ball> balls;  
  10.       

其他代码保持不变,输出后cat.xml如下:

 

 

[java] 
 
 
  1. <cat name="馄饨">  
  2.   <age>1</age>  
  3.   <balls>  
  4.     <com.timejob.node.Ball>  
  5.       <color>red</color>  
  6.     </com.timejob.node.Ball>  
  7.   </balls>  
  8. </cat>  

我们看到name属性已经作为 cat的属性输出在根节点上

 

3. @XStreamAlias 作用就是将属性按照别名输出,等同于xstream.aliasField("catAge", Cat.class, "age");

 

[java] 
 
 
  1. @XStreamAlias("cat")  
  2. public class Cat {  
  3.     //名字  
  4.     @XStreamAsAttribute  
  5.     private String name;  
  6.     //大小  
  7.     @XStreamAlias("catAge")  //here  
  8.     private Integer age;  
  9.     //玩具球  球具有颜色属性  
  10.     private List<Ball> balls;  

得到cat.xml文件如下:

 

 

[java] 
 
 
  1. <cat name="馄饨">  
  2.   <catAge>1</catAge>  
  3.   <balls>  
  4.     <com.timejob.node.Ball>  
  5.       <color>red</color>  
  6.     </com.timejob.node.Ball>  
  7.   </balls>  
  8. </cat>  

4.对于集合常用的注解 @XStreamImplicit 去除<Balls></Balls>显示,只显示之间的<Ball></Ball>节点元素

 

[java] 
 
 
  1. @XStreamAlias("cat")  
  2. public class Cat {  
  3.     //名字  
  4.     @XStreamAsAttribute  
  5.     private String name;  
  6.     //大小  
  7.     @XStreamAlias("catAge")  
  8.     private Integer age;  
  9.     //玩具球  球具有颜色属性  
  10.     @XStreamImplicit    //here  
  11.     private List<Ball> balls;  

 

此时输出如下:

 

[java] 
 
 
  1. <cat name="馄饨">  
  2.   <catAge>1</catAge>  
  3.   <com.timejob.node.Ball>  
  4.     <color>red</color>  
  5.   </com.timejob.node.Ball>  
  6. </cat>  

这样看起来就更加简洁了。

 

4.还有几个注解,都是比较好理解的,如@XStreamOmitField 表明该属性不会被序列化到xml中。

 

[java] 
 
 
  1. @XStreamAlias("cat")  
  2. public class Cat {  
  3.     //名字  
  4.     @XStreamAsAttribute  
  5.     private String name;  
  6.     //大小  
  7.     @XStreamAlias("catAge")  
  8.     private Integer age;  
  9.     //玩具球  球具有颜色属性  
  10.     @XStreamImplicit  
  11.     private List<Ball> balls;  
  12.     @XStreamOmitField        //here  
  13.     private String noCare;  

常用的就这么几个,其他的再讨论和学习吧。

 

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

以下为原创:

@XStreamImplicit(itemFieldName="ballName")
itemFieldName支持修改list中每个元素的节点的名字,如下:
、、、、、、、、、、、、、、、
import com.thoughtworks.xstream.XStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; public class Test {
public static void main(String[] args) {
//初始化cat List
balls = new ArrayList
(); balls.add(new Ball("red")); balls.add(new Ball("blue")); Cat cat = new Cat("馄饨",1,balls); //初始化结束 //为了方便查找 将文件制定到D盘cat.xml中 FileOutputStream fout = null; try {
fout = new FileOutputStream("D:/cat.xml"); } catch (FileNotFoundException e) {
e.printStackTrace(); } XStream xs = new XStream(); xs.processAnnotations(Cat.class);//将Cat.class类上的注解将会使用 xs.toXML(cat,fout); } } 将输出:

<com.jianwu.boss.domain.Cat>

<name>馄饨</name>
<age>1</age>
<ballName>
<color>red</color>
</ballName>
<ballName>
<color>blue</color>
</ballName>
</com.jianwu.boss.domain.Cat>

 

注意,

xs.processAnnotations(Cat.class);//将Cat.class类上的注解将会使用 这句一定要加上,这句才能使注解生效。

转载于:https://www.cnblogs.com/YuyuanNo1/p/8038337.html

你可能感兴趣的文章
git实践:对比svn
查看>>
1 管理入门
查看>>
C#递归遍历指定目录下的所有文件(包括子目录下的文件)
查看>>
SpringMVC的工作流程
查看>>
JS比较好用的一些方法搜集
查看>>
React Native导航器之react-navigation使用
查看>>
百度2016笔试题第一题:页面请求失败值
查看>>
实现网站图片瀑布流重点记录
查看>>
软件测试全职以及兼职平台以及薪酬报价
查看>>
Javascript:日期排班功能实现
查看>>
git push之后回滚(撤销)代码
查看>>
数组,字符串互相转化
查看>>
linux centos下配置静态ip地址
查看>>
Maven学习总结(三)——使用Maven构建项目
查看>>
Computer Vision & MultiMedia 相关国际会议汇总
查看>>
vs2008在win7系统中安装不问题
查看>>
HDU-1520 Anniversary party
查看>>
springmvc web.xml配置之 -- ContextLoaderListener
查看>>
java_数组作缓存池的不可变类实例
查看>>
webservice主流框架Axis、Axis2、XFire、CXF的比较
查看>>