前文展示了使用别名更改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注解相关推荐

  1. 使用XStream注解处理复杂xml的属性及数据集合(xml转对象)

    文章目录 1. XStream简介 2.简单使用 3.正常xml的解析 4.有点不正常xml的解析 5.更加不正常xml的解析 6.非常不正常xml的解析 1. XStream简介 XStream是一 ...

  2. Spring OXM-XStream注解

    概述 示例 示例源码 概述 XStream不但可以通过编程的方式对XML进行转换,而且支持基于注解的方式. 我们先来看下支持的注解 注解 说明 作用目标 @XStreamAlias 别名注解 类.字段 ...

  3. XStream转换Java对象与XML

    1.引入需要的jar包,在pom.xml中配置依赖 Java代码 <dependency> <groupId>com.thoughtworks.xstream</grou ...

  4. xstream不映射字段_这本XStream学习手册,真的不来看看?

    一.前言 1.XStream官网 http://x-stream.github.io 2.XStream是什么 XStream是一个简单的基于Java的类库,用来将Java对象序列化成XML(JSON ...

  5. XStream的简单使用

    XStream的简单使用 参考 http://x-stream.github.io/tutorial.html xstream官方教程 http://www.cnblogs.com/LiZhiW/p/ ...

  6. SpringBoot XStream整合

    XStream使用 XStream简介 Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射 ...

  7. XStream学习手册

    ​ 一.前言 关注微信公众号回复[源码]获取文章中源码,以及封装的工具类 1.XStream官网 http://x-stream.github.io 2.XStream是什么 XStream是一个简单 ...

  8. java oxm_spring使用OXM进行对象XML映射解析

    1.认识XML解析技术 1.1.XML相关概念 (1)DTD:XML语法规则,是XML文件的验证机制,可以通过比较XML文档和DTD文件看文档是否符合规范,元素和标签是否使用正确. (2)XML是SO ...

  9. XStream---Java对象和XML之间的转换器

    XStream对象相当Java对象和XML之间的转换器,转换过程是双向的.创建XSteam对象的方式很简单,只需要newXStream()即可. Java到xml,用toXML()方法. Xml到Ja ...

最新文章

  1. java(9)并发编程
  2. python中可以用中文作为变量-在python字典中使用变量作为键名
  3. Java中继承、接口、多态的作用详解(纯理论)
  4. Java语言学习之泛型的用法
  5. 三因素方差分析_详解方差分析表(ANOVA)(一) —— 线性回归与矩阵代数.回顾
  6. mysql用户变量_MySQL用户变量的用法
  7. php项目webpack打包,利用node.js对webpack打包
  8. Activity生命周期详解一
  9. Unity3D开发Android游戏(二)Hello world
  10. RT-Thread (3) 为RTT增加SP485驱动||RTT UART设备
  11. 2018icpc ecfinal 西安游记
  12. 学习:名词定义 大数据 Saas Paas Iaas
  13. centos7升级python,yum出现问题“ImportError: No module named urlgrabber.grabber”
  14. 梅州通风柜设计安装那些事
  15. 你的硬盘有多快?,教你提升硬盘/NAS读写性能
  16. 他励直流电动机的启动
  17. mongodb 3.4.10 更换集群IP
  18. 数据库和HTML的使用
  19. IE 下JS上传文件时出现“拒绝访问”的解决方案
  20. 求解多目标旅行商问题的遗传算法参数研究(2017的ieee)

热门文章

  1. binlog/redolog/undolog?再也不会傻傻分不清楚了
  2. 帅气逼人的Redis可视化工具
  3. 你分析过@Annotation注解的实现原理吗?
  4. 高并发:RocketMQ 削峰实战
  5. AJAX 请求真的不安全么?
  6. MyBatis源码:原来 resultMap 解析完是这样
  7. 8种方案解决重复提交问题!
  8. Openresrt最佳案例 | 第2篇:Lua入门
  9. AI面试官也太好骗了吧!
  10. MIT警告深度学习正在逼近计算极限,网友:放缓不失为一件好事