XStream的简单使用

参考

  • http://x-stream.github.io/tutorial.html xstream官方教程
  • http://www.cnblogs.com/LiZhiW/p/4313493.html#_label3 xstream基本的教程

简单介绍

  • XStream是一个简单的将javabean转换为XML形式的框架,非常的简单方便,同时对于注解也是支持的,也是很简单!

实战

依赖

<dependency><groupId>com.thoughtworks.xstream</groupId><artifactId>xstream</artifactId><version>1.4.9</version>
</dependency>
下面的这个依赖之前介绍过!
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.6</version>
</dependency>

第一个例子

package test;
import com.thoughtworks.xstream.XStream;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;/*** Created by wangji on 2017/3/20.*/@Slf4j
@Data
@Accessors(chain = true)
public class Person   {private String name;private String old;public static void main(String[] args) {XStream xstream = new XStream();Person person = new Person().setOld("old").setName("name");String xml = xstream.toXML(person);log.info(xml);}
}

输出结果:

<test.Person>//类名称,要想从新命名可以的<name>name</name><old>old</old>
</test.Person>

从新命名包名称

@Slf4j
@Data
@Accessors(chain = true)
public class Person   {private String name;private String old;public static void main(String[] args) {XStream xStream = new XStream();Person person = new Person().setOld("old").setName("name");xStream.alias("package",Person.class);//重新命名类xStream.aliasField("nameString",Person.class,"name");//为类的字段重新命名String xml = xStream.toXML(person);log.info(xml);}
}

输出结果:

<package><nameString>name</nameString><old>old</old>
</package>

除了这个还有这个!
xstream.omitField(Person.class, “friends”);把字段节点隐藏
Xstream.addImplicitCollection()省略集合根节点,看参考的文档

Xstream注解

一般的注解

package test;import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;/*** Created by wangji on 2017/3/23.*/
@Data
@Accessors(chain = true)
@Slf4j
@XStreamAlias("student-ww")
public class Student {@XStreamAlias("name-ww")private String name;@XStreamAlias("old-ww")private String old;public static void main(String[] args) {XStream xstream = new XStream();xstream.processAnnotations(Student.class);Student student = new Student().setOld("old").setName("name");log.info(xstream.toXML(student));}
}

输出结果:

<student-ww><name-ww>name</name-ww><old-ww>old</old-ww>
</student-ww>

省略集合根节点:@XStreamImplicit
隐藏字段:@XStreamOmitField

设置转换器

@XStreamConverter(),转换器的意思就是在输出前做个处理。

@Data
@Accessors(chain = true)
@Slf4j
@XStreamAlias("student-ww")
public class Student {@XStreamAlias("name-ww")private String name;@XStreamAlias("old-ww")private String old;@XStreamConverter(value=BooleanConverter.class,booleans={false},strings={"男","女"})private boolean sex;public static void main(String[] args) {XStream xstream = new XStream();xstream.processAnnotations(Student.class);Student student = new Student().setOld("old").setName("name").setSex(true);log.info(xstream.toXML(student));}
}

输出结果:

 <student-ww><name-ww>name</name-ww><old-ww>old</old-ww><sex>男</sex>
</student-ww>

自定义一个转换器

package test;import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;/*** Created by wangji on 2017/3/23.*/
public class StudentConvert implements Converter {//定义转换器能转换的JavaBean类型public boolean canConvert(Class aClass) {return aClass.isAssignableFrom(Student.class);}把对象序列化成XMLpublic void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext marshallingContext) {Student student = (Student) value;writer.startNode("姓名");writer.setValue(student.getName());writer.endNode();writer.startNode("年龄");writer.setValue(student.getOld()+"");writer.endNode();writer.startNode("转换器");writer.setValue("自定义的转换器");writer.endNode();}//把XML反序列化成对象public Object unmarshal(HierarchicalStreamReader hierarchicalStreamReader, UnmarshallingContext unmarshallingContext) {return null;}}

使用转换器

@Data
@Accessors(chain = true)
@Slf4j
@XStreamAlias("student-ww")
public class Student {@XStreamAlias("name-ww")private String name;@XStreamAlias("old-ww")private String old;public static void main(String[] args) {XStream xstream = new XStream();xstream.processAnnotations(Student.class);Student student = new Student().setOld("old").setName("name");xstream.registerConverter(new StudentConvert());log.info(xstream.toXML(student));}
}
因为被覆盖了,所以无效!
<student-ww><姓名>name</姓名><年龄>old</年龄><转换器>自定义的转换器</转换器>
</student-ww>

Xstream对象流

输出流的意思,就是输出结果的意思,我们可以随意的输出各种结果:
http://x-stream.github.io/objectstream.html

package test;import com.thoughtworks.xstream.XStream;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;import java.io.IOException;
import java.io.ObjectOutputStream;/*** Created by wangji on 2017/3/20.*/@Slf4j
@Data
@Accessors(chain = true)
public class Person  {private String name;private String old;public static void main(String[] args) {try {XStream xStream = new XStream();Person person = new Person().setOld("old").setName("name");ObjectOutputStream out = xStream.createObjectOutputStream(System.out);out.writeObject(person);out.writeObject("Hello");out.writeInt(12345);out.close();} catch (IOException e) {e.printStackTrace();}}
}

输出结果:

<object-stream><test.Person><name>name</name><old>old</old></test.Person><string>Hello</string><int>12345</int>
</object-stream>

利用对象流增加XML声明

利用继承的特性,覆盖掉父类的toXML(Object obj, Writer writer),先输出一部分的xml的声明;

/*** Created by wangji on 2017/3/23.* 增加XML声明,默认XStream是没有XML声明的*/
public class XmlUtf8Xstream extends XStream {/*** xml版本号,默认1.0*/private String version;/*** xml编码,默认UTF-8*/private String encoding;public XmlUtf8Xstream() {this("1.0","UTF-8");}//XML的声明public String getDeclaration() {return "< ?xml version=\"" + this.version + "\" encoding=\"" + this.encoding + "\"? >\n";}public XmlUtf8Xstream(String version, String encoding) {this.version = version;this.encoding = encoding;}/*** 覆盖父类的方法,然后调用父类的,输出的时候先输出这个XML的声明* @param obj* @param output*/@Overridepublic void toXML(Object obj, OutputStream output){try {String dec = this.getDeclaration();byte[] bytesOfDec = dec.getBytes("UTF-8");output.write(bytesOfDec);} catch (Exception e) {throw new RuntimeException("error", e);}super.toXML(obj, output);}@Overridepublic void toXML(Object obj, Writer writer) {try {writer.write(getDeclaration());} catch (Exception e) {throw new RuntimeException("error", e);}super.toXML(obj, writer);}}

例子:


@Slf4j
@Data
@Accessors(chain = true)
public class Person   implements PersonIn {private String name;private String old;public static void main(String[] args) {XStream xStream = new XmlUtf8Xstream();xStream.alias("package",Person.class);Person person = new Person().setOld("old").setName("name");log.info(xStream.toXML(person));}
}

输出结果:

< ?xml version="1.0" encoding="UTF-8"?>
<package><name>name</name><old>old</old>
</package>

XStream的简单使用相关推荐

  1. XStream生成简单的XMl文件2

    1.新建RequestInfo.java文件: package com.saicfc.pmpf.resume.ccb.utils;/*** 支付查询请求信息* @author lizhiyong* @ ...

  2. XStream将XML转换为JAVA对象快速指南

    XStream是一套简单实用的JAVA类库,它用于序列化对象和XML对象之间互相转换.由于XStream配置简单,灵活易用,因此在XML对象和JAVA对象序列化市场上有很大的空间.本文并不会对XStr ...

  3. xstream操作xml

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

  4. 《大数据》2015年第3期“网络大数据专题”——从系统角度审视大图计算

    从系统角度审视大图计算 吴城文,张广艳,郑纬民 (清华大学计算机科学与技术系 北京 100084) 摘要:大图计算已经成为学术界和工业界的一种基本计算模式,并且已经被应用到许多实际的大数据计算问题上, ...

  5. 一次代码重构之旅-快速读写xml文件工具类封装

    为了满足系统的灵活性,有些功能经常需要用到配置文件,一般是xml格式的居多.如何能快速读写配置文件呢? 以前都是用dom4j提供的api来读写xml文件,用dom4j读写配置文件总感觉像是在结构化的处 ...

  6. 最受欢迎的Java第三方库

    目录 前言 Core核心库 HTML, XML解析 Web框架 图标,报表,图形 窗口库 GUI框架 自然语言处理 静态分析 JSON 数学 日志 Office相关 日期和时间 数据库 开发工具 前言 ...

  7. JAVA Bean和XML之间的相互转换 - XStream简单入门

    JAVA Bean和XML之间的相互转换 - XStream简单入门 背景介绍 XStream的简介 注解简介 应用实例 背景介绍 我们在工作中经常 遇到文件解析为数据或者数据转化为xml文件的情况, ...

  8. xstream java_XStream将java转化成xml的简单使用

    XStream可以用来将java实体转化成xml形式的字符串, 也可以将xml文档的字符串读取成java实体. jar包依赖地址 com.thoughtworks.xstream xstream ${ ...

  9. 看看XStream注解

    前文展示了使用别名更改XML展示内容,在这一节,可以使用注解更简单的更改XML展示. (1)最简单的注解示例 1. 输出响应消息 package com.favccxx.favsoft.pojo; p ...

最新文章

  1. mq系列传感器的程序_深圳现代通信系列实训系统
  2. Spring-AOP @AspectJ进阶之绑定代理对象
  3. 全球及中国生物仿制药淋巴细胞调节剂行业需求潜力分析及及投资规划研究报告2021-2027年
  4. 数据库图书管理建表与修改表
  5. Android入门:封装一个HTTP请求的辅助类
  6. 为什么普通红包自己不能领_为什么窗帘不能用洗衣机洗呢?千万别让窗帘砸在自己手里!...
  7. 6.8使用Consul和envconsul来配置外部环境变量
  8. 效率源linux,效率源希捷硬盘修复(4.2版)及程序下载
  9. Openbravo开发手册
  10. destoon task.js.php,Destoon B2B网站系统在线聊天插件 v1.0
  11. 山西中级消防设施操作员考前必背考点,模拟真题及答案
  12. WiFi6尚未普及,WiFi7已在路上
  13. C++普通函数指针和类成员函数指针
  14. 【性能测试】轻量级性能测试工具Hey
  15. python decimal_实例详解Python模块decimal
  16. 单总线CPU设计(现代时序)(HUST)
  17. 马氏体不锈钢1.4005/X12CrS13密度多少
  18. Cron表达式周1至周5,每天上午8点至下午18点,每分钟执行一次
  19. 飞机失事,软件“背锅”?软件测试对机载软件有多重要?
  20. CleanMyMac X4.10.5首选苹果系统清理神器

热门文章

  1. 马云:聪明的人都离开阿里了 剩下的成了富翁
  2. DHT11温湿度LCD显示
  3. html的介绍与示例
  4. [洛谷] P2357 守墓人
  5. mysql chinanet外网连接不上_china net是什么无线网
  6. ubuntu添加自定义vga输出分辨率
  7. 中国好SaaS走进海尔:企业关注重心从纯模式创新回归资源竞争
  8. 10万ip网站 服务器,我做电影站如何在半年内实现日IP10万(转载)
  9. 七麦js破解,python爬取app榜单
  10. (转)如何治疗颈椎突 - 对程序员来说很有用