看看XStream注解
前文展示了使用别名更改XML展示内容,在这一节,可以使用注解更简单的更改XML展示。
(1)最简单的注解示例
1. 输出响应消息
package com.favccxx.favsoft.pojo;
public class ResponseMessage {private int messageType;private String messageContent;public ResponseMessage(int messageType, String messageContent){this.messageType = messageType;this.messageContent = messageContent;}public int getMessageType() {return messageType;}public void setMessageType(int messageType) {this.messageType = messageType;}public String getMessageContent() {return messageContent;}public void setMessageContent(String messageContent) {this.messageContent = messageContent;}
}
2. 开始测试
package com.favccxx.favsoft.main;
import com.favccxx.favsoft.pojo.ResponseMessage;
import com.thoughtworks.xstream.XStream;
public class MainAnnotations {public static void main(String[] args) {XStream stream = new XStream();ResponseMessage msg = new ResponseMessage(200, "成功");System.out.println(stream.toXML(msg));}
}
3. 测试结果
<com.favccxx.favsoft.pojo.ResponseMessage><messageType>200</messageType><messageContent>成功</messageContent> </com.favccxx.favsoft.pojo.ResponseMessage>
4. 使用注解后的输出内容
package com.favccxx.favsoft.pojo;
import com.thoughtworks.xstream.annotations.XStreamAlias;
@XStreamAlias("message")
public class ResponseMessage {@XStreamAlias("type")private int messageType;@XStreamAlias("content")private String messageContent;public ResponseMessage(int messageType, String messageContent){this.messageType = messageType;this.messageContent = messageContent;}public int getMessageType() {return messageType;}public void setMessageType(int messageType) {this.messageType = messageType;}public String getMessageContent() {return messageContent;}public void setMessageContent(String messageContent) {this.messageContent = messageContent;}
}
xstream.processAnnotations(ResponseMessage.class);
<message><type>200</type><content>成功</content> </message>
(2)使用集合注解
2.1 响应消息对象
package com.favccxx.favsoft.pojo;
import java.util.Arrays;
import java.util.List;
import com.thoughtworks.xstream.annotations.XStreamAlias;
@XStreamAlias("message")
public class ResponseMessage {@XStreamAlias("type")private int messageType;@XStreamAlias("content")private List<String> messageContent;public ResponseMessage(int messageType, String ... messageContent){this.messageType = messageType;this.messageContent = Arrays.asList(messageContent);}public int getMessageType() {return messageType;}public void setMessageType(int messageType) {this.messageType = messageType;}public List<String> getMessageContent() {return messageContent;}public void setMessageContent(List<String> messageContent) {this.messageContent = messageContent;}
}
2.2 开始测试
package com.favccxx.favsoft.main;
import com.favccxx.favsoft.pojo.ResponseMessage;
import com.thoughtworks.xstream.XStream;
public class MainAnnotations {public static void main(String[] args) {XStream xstream = new XStream();xstream.processAnnotations(ResponseMessage.class);ResponseMessage msg = new ResponseMessage(28, "终于爬上来了!","我忘带钥匙了!!!");System.out.println(xstream.toXML(msg));}
}
2.3 输出结果
<message><type>28</type><content class="java.util.Arrays$ArrayList"><a class="string-array"><string>终于爬上来了!</string><string>我忘带钥匙了!!!</string></a></content> </message>
2.4使用@XStreamImplicit注解将集合标记为隐式集合
package com.favccxx.favsoft.pojo;
import java.util.Arrays;
import java.util.List;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
@XStreamAlias("message")
public class ResponseMessage {@XStreamAlias("type")private int messageType;@XStreamImplicitprivate List<String> messageContent;public ResponseMessage(int messageType, String... messageContent) {this.messageType = messageType;this.messageContent = Arrays.asList(messageContent);}public int getMessageType() {return messageType;}public void setMessageType(int messageType) {this.messageType = messageType;}public List<String> getMessageContent() {return messageContent;}public void setMessageContent(List<String> messageContent) {this.messageContent = messageContent;}
}
2.5 输出结果
<message><type>28</type><string>终于爬上来了!</string><string>我忘带钥匙了!!!</string> </message>
2.6 在原有注解对象上,对字段进行别名
package com.favccxx.favsoft.pojo;
import java.util.Arrays;
import java.util.List;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
@XStreamAlias("message")
public class ResponseMessage {@XStreamAlias("type")private int messageType;@XStreamImplicit(itemFieldName="dialog")private List<String> messageContent;public ResponseMessage(int messageType, String... messageContent) {this.messageType = messageType;this.messageContent = Arrays.asList(messageContent);}public int getMessageType() {return messageType;}public void setMessageType(int messageType) {this.messageType = messageType;}public List<String> getMessageContent() {return messageContent;}public void setMessageContent(List<String> messageContent) {this.messageContent = messageContent;}
}
2.7 输出内容如下
<message><type>28</type><dialog>终于爬上来了!</dialog><dialog>我忘带钥匙了!!!</dialog> </message>
(3)属性别名
3.1响应消息
package com.favccxx.favsoft.pojo;
import java.util.Arrays;
import java.util.List;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import com.thoughtworks.xstream.converters.basic.BooleanConverter;
@XStreamAlias("message")
public class ResponseMessage {@XStreamAlias("type")@XStreamAsAttributeprivate int messageType;@XStreamImplicit(itemFieldName = "dialog")private List<String> messageContent;@XStreamAsAttribute@XStreamConverter(value = BooleanConverter.class, booleans = { false }, strings = { "yes", "no" })private boolean important;public ResponseMessage(int messageType, boolean important, String... messageContent) {this.messageType = messageType;this.messageContent = Arrays.asList(messageContent);this.important = important;}public int getMessageType() {return messageType;}public void setMessageType(int messageType) {this.messageType = messageType;}public List<String> getMessageContent() {return messageContent;}public void setMessageContent(List<String> messageContent) {this.messageContent = messageContent;}
}
3.2输出内容
<message type="28" important="yes"><dialog>终于爬上来了!</dialog><dialog>我忘带钥匙了!!!</dialog> </message>
(4)所有字段变为文本,值得注意的是,转换为文本的内容,只能是String类型的,因为转换器是StringValueConvertor。
package com.favccxx.favsoft.pojo;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import com.thoughtworks.xstream.converters.basic.BooleanConverter;
import com.thoughtworks.xstream.converters.extended.ToAttributedValueConverter;
@XStreamAlias("message")
@XStreamConverter(value = ToAttributedValueConverter.class, strings = { "messageContent" })
public class ResponseMessage {@XStreamAlias("type")private int messageType;@XStreamAlias("content")private String messageContent;@XStreamConverter(value = BooleanConverter.class, booleans = { false }, strings = { "yes", "no" })private boolean important;public ResponseMessage(int messageType, boolean important, String messageContent) {this.messageType = messageType;this.messageContent = messageContent;this.important = important;}public int getMessageType() {return messageType;}public void setMessageType(int messageType) {this.messageType = messageType;}public String getMessageContent() {return messageContent;}public void setMessageContent(String messageContent) {this.messageContent = messageContent;}public boolean isImportant() {return important;}public void setImportant(boolean important) {this.important = important;}
}
<message type="200" important="yes">今天星期五</message>
(5)省略字段
package com.favccxx.favsoft.pojo;
import java.util.Arrays;
import java.util.List;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import com.thoughtworks.xstream.annotations.XStreamOmitField;
import com.thoughtworks.xstream.converters.basic.BooleanConverter;
@XStreamAlias("message")
public class ResponseMessage {@XStreamOmitFieldprivate int messageType;@XStreamImplicit(itemFieldName="content")private List<String> messageContent;@XStreamConverter(value = BooleanConverter.class, booleans = { false }, strings = { "yes", "no" })private boolean important;public ResponseMessage(int messageType, boolean important, String... messageContent) {this.messageType = messageType;this.important = important;this.messageContent = Arrays.asList(messageContent);}public int getMessageType() {return messageType;}public void setMessageType(int messageType) {this.messageType = messageType;}public List<String> getMessageContent() {return messageContent;}public void setMessageContent(List<String> messageContent) {this.messageContent = messageContent;}public boolean isImportant() {return important;}public void setImportant(boolean important) {this.important = important;}
}
<message><content>今天星期五</content><content>明天去逛街</content><important>yes</important> </message>
(6)自动检测注解
可以使用下述方法自动检测注解,而不用每次都为每个类设置注解
xstream.autodetectAnnotations(true);
// xstream.processAnnotations(ResponseMessage.class);
总结:使用注解比别名方便易用,但是当一个类被多次重用时,使用别名会更明智些。
看看XStream注解相关推荐
- 使用XStream注解处理复杂xml的属性及数据集合(xml转对象)
文章目录 1. XStream简介 2.简单使用 3.正常xml的解析 4.有点不正常xml的解析 5.更加不正常xml的解析 6.非常不正常xml的解析 1. XStream简介 XStream是一 ...
- Spring OXM-XStream注解
概述 示例 示例源码 概述 XStream不但可以通过编程的方式对XML进行转换,而且支持基于注解的方式. 我们先来看下支持的注解 注解 说明 作用目标 @XStreamAlias 别名注解 类.字段 ...
- XStream转换Java对象与XML
1.引入需要的jar包,在pom.xml中配置依赖 Java代码 <dependency> <groupId>com.thoughtworks.xstream</grou ...
- xstream不映射字段_这本XStream学习手册,真的不来看看?
一.前言 1.XStream官网 http://x-stream.github.io 2.XStream是什么 XStream是一个简单的基于Java的类库,用来将Java对象序列化成XML(JSON ...
- XStream的简单使用
XStream的简单使用 参考 http://x-stream.github.io/tutorial.html xstream官方教程 http://www.cnblogs.com/LiZhiW/p/ ...
- SpringBoot XStream整合
XStream使用 XStream简介 Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射 ...
- XStream学习手册
一.前言 关注微信公众号回复[源码]获取文章中源码,以及封装的工具类 1.XStream官网 http://x-stream.github.io 2.XStream是什么 XStream是一个简单 ...
- java oxm_spring使用OXM进行对象XML映射解析
1.认识XML解析技术 1.1.XML相关概念 (1)DTD:XML语法规则,是XML文件的验证机制,可以通过比较XML文档和DTD文件看文档是否符合规范,元素和标签是否使用正确. (2)XML是SO ...
- XStream---Java对象和XML之间的转换器
XStream对象相当Java对象和XML之间的转换器,转换过程是双向的.创建XSteam对象的方式很简单,只需要newXStream()即可. Java到xml,用toXML()方法. Xml到Ja ...
最新文章
- java(9)并发编程
- python中可以用中文作为变量-在python字典中使用变量作为键名
- Java中继承、接口、多态的作用详解(纯理论)
- Java语言学习之泛型的用法
- 三因素方差分析_详解方差分析表(ANOVA)(一) —— 线性回归与矩阵代数.回顾
- mysql用户变量_MySQL用户变量的用法
- php项目webpack打包,利用node.js对webpack打包
- Activity生命周期详解一
- Unity3D开发Android游戏(二)Hello world
- RT-Thread (3) 为RTT增加SP485驱动||RTT UART设备
- 2018icpc ecfinal 西安游记
- 学习:名词定义 大数据 Saas Paas Iaas
- centos7升级python,yum出现问题“ImportError: No module named urlgrabber.grabber”
- 梅州通风柜设计安装那些事
- 你的硬盘有多快?,教你提升硬盘/NAS读写性能
- 他励直流电动机的启动
- mongodb 3.4.10 更换集群IP
- 数据库和HTML的使用
- IE 下JS上传文件时出现“拒绝访问”的解决方案
- 求解多目标旅行商问题的遗传算法参数研究(2017的ieee)