XStream基本使用
2016-04-01 00:00
483 查看
摘要: 记录XStream的基本使用方法。
XStream 的文档地址:
People.java
City.java
ElectronicProduct.java
第三方xml如果有变动,只要增加一个节点属性,使用XStream解析时就会报错,而且非常难找错误。fastjson的设计就比XStream设计的的要合理,没有的字段不解析出来就可以了,何必导致整个解析报错!
解决方案:
重写XStream的ReflectionConverter转换器,忽略没有找到的属性域(推荐使用)。
自己再造轮子。
一、XStream
XStream 的github地址:https://github.com/x-stream/xstream
XStream 的文档地址:
http://x-stream.github.io/index.html
二、基本使用示例
XStreamDemo.javaimport 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<ElectronicProduct> productList = new ArrayList<ElectronicProduct>(); 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的内容为: /* <People> <id>1</id> <name>Kevin</name> <company_name>暂时不告诉你</company_name> <City> <name>杭州</name> </City> <ElectronicProducts> <ElectronicProduct> <name>MacBook Pro</name> </ElectronicProduct> <ElectronicProduct> <name>iPhone 5S</name> </ElectronicProduct> <ElectronicProduct> <name>iPad Air 2</name> </ElectronicProduct> </ElectronicProducts> </People> */ // 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<ElectronicProduct> 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<ElectronicProduct> getElectronicProductList() { return electronicProductList; } public void setElectronicProductList(List<ElectronicProduct> 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设计的的要合理,没有的字段不解析出来就可以了,何必导致整个解析报错!
解决方案:
重写XStream的ReflectionConverter转换器,忽略没有找到的属性域(推荐使用)。
自己再造轮子。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序