xstream中几个注解的含义和用法(转)
XStream是个很强大的工具,能将Java对象和xml之间相互转化。xstream不在意java类中成员变量是私有还是公有,也不在乎是否有默认构造函数。它调用方式也非常简单:从xml对象转化为java对象,使用fromXML()方法;从java对象序列化为xml,toXML()即可,很方便。xstream也支持注解方式,这些都是为了简化输出而设计,下面为大家简单说一下这几个注解的含义和用法。
1. 当没有任何注解情况下
- public class Cat {
- //名字
- private String name;
- //大小
- private Integer age;
- //玩具球 球具有颜色属性
- private List<Ball> balls;
- Cat(String name,Integer age,List<Ball> balls){
- this.name = name;
- this.age = age;
- this.balls=balls;
- }
- //getter/setter方法 为了赋值使用
其中Ball定义如下:
- public class Ball {
- //颜色
- private String color;
- Ball(String color){
- this.color = color;
- }
没有任何注解,输出如下:
- public static void main(String[] args) throws Exception{
- //初始化cat
- List<Ball> balls = new ArrayList<Ball>();
- balls.add(new Ball("red"));
- Cat cat = new Cat("馄饨",1,balls);
- //初始化结束
- //为了方便查找 将文件制定到D盘cat.xml中
- FileOutputStream fout = new FileOutputStream("D:/cat.xml");
- XStream xs = new XStream();
- xs.toXML(cat,fout);
- }<span style="font-size:14px;">
- </span>
得到Cat.xml如下
- <com.timejob.node.Cat>
- <name>馄饨</name>
- <age>1</age>
- <balls>
- <com.timejob.node.Ball>
- <color>red</color>
- </com.timejob.node.Ball>
- </balls>
- </com.timejob.node.Cat>
1. @XStreamAlias("cat") 等同于 xstream.alias("cat", Cat.class);
- @XStreamAlias("cat") //here
- public class Cat {
- //名字
- private String name;
- //大小
- private Integer age;
- //玩具球 球具有颜色属性
- private List<Ball> balls;
我们需要明确给出,哪个类的注解需要被激活:
- public static void main(String[] args) throws Exception{
- //初始化cat
- List<Ball> balls = new ArrayList<Ball>();
- balls.add(new Ball("red"));
- Cat cat = new Cat("馄饨",1,balls);
- //初始化结束
- //为了方便查找 将文件制定到D盘cat.xml中
- FileOutputStream fout = new FileOutputStream("D:/cat.xml");
- XStream xs = new XStream();
- //xs.alias("cat", Cat.class); //等同于 @XStreamAlias("cat")
- xs.processAnnotations(Cat.class);//将Cat.class类上的注解将会使用
- xs.toXML(cat,fout);
- }
当我们在Cat类名使用该注解时,表明该类序列化为xml时,类名com.timejob.node.Cat将替换成cat输出,这样使得xml更清晰简短:
- <cat>
- <name>馄饨</name>
- <age>1</age>
- <balls>
- <com.timejob.node.Ball>
- <color>red</color>
- </com.timejob.node.Ball>
- </balls>
- </cat>
2. XStreamAsAttribute 作用是将类内成员作为父节点属性输出,等同于xstream.useAttributeFor(Cat.class, "name")
- @XStreamAlias("cat")
- public class Cat {
- //名字
- @XStreamAsAttribute // here 将name作为Cat属性输出在父节点
- private String name;
- //大小
- private Integer age;
- //玩具球 球具有颜色属性
- private List<Ball> balls;
其他代码保持不变,输出后cat.xml如下:
- <cat name="馄饨">
- <age>1</age>
- <balls>
- <com.timejob.node.Ball>
- <color>red</color>
- </com.timejob.node.Ball>
- </balls>
- </cat>
我们看到name属性已经作为 cat的属性输出在根节点上
3. @XStreamAlias 作用就是将属性按照别名输出,等同于xstream.aliasField("catAge", Cat.class, "age");
- @XStreamAlias("cat")
- public class Cat {
- //名字
- @XStreamAsAttribute
- private String name;
- //大小
- @XStreamAlias("catAge") //here
- private Integer age;
- //玩具球 球具有颜色属性
- private List<Ball> balls;
得到cat.xml文件如下:
- <cat name="馄饨">
- <catAge>1</catAge>
- <balls>
- <com.timejob.node.Ball>
- <color>red</color>
- </com.timejob.node.Ball>
- </balls>
- </cat>
4.对于集合常用的注解 @XStreamImplicit 去除<Balls></Balls>显示,只显示之间的<Ball></Ball>节点元素
- @XStreamAlias("cat")
- public class Cat {
- //名字
- @XStreamAsAttribute
- private String name;
- //大小
- @XStreamAlias("catAge")
- private Integer age;
- //玩具球 球具有颜色属性
- @XStreamImplicit //here
- private List<Ball> balls;
此时输出如下:
- <cat name="馄饨">
- <catAge>1</catAge>
- <com.timejob.node.Ball>
- <color>red</color>
- </com.timejob.node.Ball>
- </cat>
这样看起来就更加简洁了。
4.还有几个注解,都是比较好理解的,如@XStreamOmitField 表明该属性不会被序列化到xml中。
- @XStreamAlias("cat")
- public class Cat {
- //名字
- @XStreamAsAttribute
- private String name;
- //大小
- @XStreamAlias("catAge")
- private Integer age;
- //玩具球 球具有颜色属性
- @XStreamImplicit
- private List<Ball> balls;
- @XStreamOmitField //here
- private String noCare;
常用的就这么几个,其他的再讨论和学习吧。
转载于:https://www.cnblogs.com/Syria/p/6422280.html
xstream中几个注解的含义和用法(转)相关推荐
- C和C++中argc和argv的含义以及用法
C和C++中argc和argv的含义以及用法 各位小伙伴在接触C和C++的时候,总会看到这样的东西 很多伙伴应该都一直注意到了这两个参数,但是很多伙伴编写多年C和C++代码,还没有使用过这两个参数.a ...
- 2.aop中几个注解的含义
参考地址:http://elim.iteye.com/blog/2395255 转载于:https://www.cnblogs.com/jiangjing/p/8953583.html
- (转)C++ main函数中参数argc和argv含义及用法
原博地址:https://blog.csdn.net/dcrmg/article/details/51987413 argc 是 argument count的缩写,表示传入main函数的参数个数: ...
- python中 [::-1]的含义和用法
例子如上图所示.简单来说,a[::-1]就是将序列a中的元素翻转.
- 【IOS开发】SwiftUI中的反斜杠\含义以及用法
1.@Environment(\.colorScheme)中的\是什么意思? 在 SwiftUI 中,使用 \(反斜杠)可以访问环境中的键路径(key path),这样你就可以获取环境变量的值.键路径 ...
- C++ main函数中参数argc和argv含义及用法( argument count和 argument vector)
rgc 是 argument count的缩写,表示传入main函数的参数个数: argv 是 argument vector的缩写(注意:不是argument value的缩写,自己以前理解错了), ...
- HTML中的script标签的含义和用法
<script> 标签通常放置在一个 HTML 网页的头部标签 <head> 标签内,用于链接外部 JavaScript 文件的外部资源标签.
- UML类图中各种箭头和线条的含义和用法(转)
UML类图中箭头和线条的含义和用法 1.UML中关系 本节向大家学习一下UML箭头.线条代表的意义,UML中关系主要有依赖,聚合,合成,泛化和实现等,下面就让我们来看一下这些关系如何用UML箭头和线条 ...
- Spring 中的各种注解,光会用可不够哦!
来源:https://digdeep.cnblogs.com/digdeep/p/4525567.html 1. Java中的注解 2. 使用 元注解 来自定义注解 和 处理自定义注解 3. spri ...
最新文章
- 计算机系统的分类补充完整,数据库系统原(理B)13春A卷.doc
- [Android]打开eclipse报错:发现了以元素 'd:skin' 开头的无效内容。此处不应含有子元素。...
- ant接口自动化 junit_Jenkins + Ant自动运行Junit测试
- 超级签名源码_苹果iOS超级签名源码技术解析
- php 网站数量,PHP给网站添加在线人数统计
- 问题六十八:着色模型(shading model)(1)——反射模型(reflection model)(1)——概述
- 17、关于hibernate的N+1问题
- apache2.4 中文乱码问题
- paip.提升性能---C#.NET程序内存占用过多以及OutOfMemory解决方法
- VMware Tools手动安装
- CardView的基本使用
- 合肥二手房房价分析(多元线性回归)
- 一种可大规模定向钓鱼携程旅游网千万用户的***过程重放(转载自wooyun)
- 在MySQL中实现交叉表查询2(动态交叉表)
- python和excel的区别-对比Excel,轻松学习Python数据分析
- 后悔买房了,太难了,每个月工资8000,房贷5500
- 看steam教育之风带来创新与变革
- 理财通app的设计与实现(六)
- 写一段关于等离子杀菌技术的商业模式规划
- 基于iLog3的实时日志实现
热门文章
- python3 正则表达式模块re相关
- HDFS文件导出本地合并为一个文件
- android波纹效果弹窗,Android自定义View实现波纹效果
- java 当地时间_【JAVA】获取当地时间
- 修改form_Vue通过阿里云oss的url连接直接下载文件并修改文件名
- syslog打印不带等级_syslog之一:Linux syslog日志系统详解
- php实现购物车 redis,redis 哈希数据类型简单操作(实现购物车案例)
- 彼聆智能语音机器人_电销行业的人工智能:智能语音电话机器人
- ArrayList的底层实现原理
- 2021年中国K12在线辅导行业总结和趋势洞察