博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XStream基本使用
阅读量:6437 次
发布时间:2019-06-23

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

hot3.png

一、XStream

XStream 的github地址:

https://github.com/x-stream/xstream

XStream 的文档地址:

http://x-stream.github.io/index.html

二、基本使用示例

XStreamDemo.java

import java.util.ArrayList;import java.util.List;import com.thoughtworks.xstream.XStream;import com.thoughtworks.xstream.io.naming.NoNameCoder;import com.thoughtworks.xstream.io.xml.XppDriver;/** * XStream基本使用示例 * * @author Kevin * @version V1.0.0 * @date 2016-4-1 */public class XStreamDemo {    public static void main(String[] args) {        XStream xstream = new XStream(new XppDriver(new NoNameCoder()));        //指定所有class均解析annotations        xstream.autodetectAnnotations(true);        People people = new People();        people.setId(1L);        people.setName("Kevin");        people.setCompanyName("暂时不告诉你");        people.setCity(new City("杭州"));        List
productList = new ArrayList
(); productList.add(new ElectronicProduct("MacBook Pro")); productList.add(new ElectronicProduct("iPhone 5S")); productList.add(new ElectronicProduct("iPad Air 2")); people.setElectronicProductList(productList); // Serializing an object to XML String peopleXML = xstream.toXML(people); System.out.println("peopleXML is : \n" + peopleXML); //peopleXML的内容为: /*
1
Kevin
暂时不告诉你
杭州
MacBook Pro
iPhone 5S
iPad Air 2
*/ // Deserializing an object back from XML People newpeople = (People) xstream.fromXML(peopleXML); System.out.println("city name is : " + newpeople.getCity().getName()); }}

People.java

import java.util.List;import com.thoughtworks.xstream.annotations.XStreamAlias;/** * 城市里的人 * * @author Kevin * @version V1.0.0 * @date 2016-4-1 */@XStreamAlias("People")public class People {    // ID    private Long id;    // 姓名    private String name;    // 所在公司名称    @XStreamAlias("company_name")    private String companyName;    // 所在城市    @XStreamAlias("City")    private City city;    // 拥有的电子产品    @XStreamAlias("ElectronicProducts")    private List
electronicProductList; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCompanyName() { return companyName; } public void setCompanyName(String companyName) { this.companyName = companyName; } public City getCity() { return city; } public void setCity(City city) { this.city = city; } public List
getElectronicProductList() { return electronicProductList; } public void setElectronicProductList(List
electronicProductList) { this.electronicProductList = electronicProductList; }}

City.java

import com.thoughtworks.xstream.annotations.XStreamAlias;/** * 城市类 * * @author Kevin * @version V1.0.0 * @date 2016-4-1 */@XStreamAlias("City")public class City {    // 名称    private String name;    public City(String name) {        this.name = name;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}

ElectronicProduct.java

import com.thoughtworks.xstream.annotations.XStreamAlias;/** * 电子产品 * * @author Kevin * @version V1.0.0 * @date 2016-4-1 */@XStreamAlias("ElectronicProduct")public class ElectronicProduct {    // 名称    private String name;    public ElectronicProduct(String name) {        this.name = name;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}

三、使用心得

个人认为XStream不适合用于解析第三方的xml。

第三方xml如果有变动,只要增加一个节点属性,使用XStream解析时就会报错,而且非常难找错误。fastjson的设计就比XStream设计的的要合理,没有的字段不解析出来就可以了,何必导致整个解析报错!

解决方案:

  1. 重写XStream的ReflectionConverter转换器,忽略没有找到的属性域(推荐使用)。
  2. 自己再造轮子。

转载于:https://my.oschina.net/zhaokaiju/blog/651374

你可能感兴趣的文章
自动关闭esxi主机及所有虚拟机
查看>>
从网站上下载视频
查看>>
Oracle12cR2的CDB与PDB简单管理操作
查看>>
Java中的CopyOnWrite
查看>>
第一个shell脚本
查看>>
每日一shell(八)nginx日志切割
查看>>
[Hadoop in China 2011] Facebook Message在HBase基础上的应用
查看>>
支付系统信息流和资金流
查看>>
css框架
查看>>
Model层视频播放关闭问题及手机视频播放的适配问题解决方案
查看>>
Cisco 2960 交换机密码设置
查看>>
超媒体API
查看>>
第六周网络攻防作业
查看>>
springboot 项目部署为war项目
查看>>
【MongoDB】2、安装MongoDB 2.6.1 on Unbuntu 14.04(学习流水账)
查看>>
iOS中AVFoundation的简单使用—音乐的播放
查看>>
win10 家庭版 CredSSP加密Oracle修正 设置方法
查看>>
在spring中使用自定义注解注册监听器
查看>>
Kalileo中DiagramGroup布局
查看>>
[转载] 大道至简:软件工程实践者的思想——第十章 是思考还是思想
查看>>