XStream


1. 什么作用
* 可以把JavaBean转换为(序列化为)xml


2. XStream的jar包
* 核心jar包:xstream-1.4.7.jar;
* 必须依赖包:xpp3_min-1.1.4c(XML Pull Parser,一款速度很快的XML解析器);


3. 使用步骤
* XStream xstream = new XStream();
* String xmlStr = xstream.toXML(javabean);


4. 使用细节
* 别名:把类型对应的元素名修改了
> xstream.alias("china",List.class):让List类型生成的元素名为china
> xstream.alias("province",Province.class):让Province类型生成的元素名为province
* 使用为属性:默认类的成员,生成的是元素的子元素!我们希望让类的成员生成元素的属性
> xstream.useAttributeFor(Province.class,"name"):把Province类的名为name成员,生成<province>元素的name属性
* 去除Collection类型的成名:我们只需要Collection的内容,而不希望Collection本身也生成一个元素
> xstream.addImplicitCollection(Province.class,"cities"):让Province类的名为cities(它是List类型的,它的内容还会生成元素)的成名不生成元素
* 去除类的指定成名,让其不生成xml元素

> xstream.omitField(City.class,"description"):在生成的xml中不会出现City类的名为description的对应的元素!

package demo1;

public class City {
	private String name;
	private String description;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	public City(String name,String description) {
		super();
		this.name = name;
		this.description = description;
	}
	public City() {
		super();
		// Todo Auto-generated constructor stub
	}
	
}

package demo1;

import java.util.ArrayList;
import java.util.List;

public class Province {
	private String name;
	private List<City> cities=new ArrayList<City>();
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public List<City> getCities() {
		return cities;
	}
	public void setCities(List<City> cities) {
		this.cities = cities;
	}
	
	public void addCity(City city){
		this.cities.add(city);
	}
	public Province(String name) {
		super();
		this.name = name;
	}
	
}
package demo1;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import com.thoughtworks.xstream.XStream;

public class Demo {
	
	public List<Province> getProinvceList(){
		Province p1=new Province("北京");
		p1.addCity(new City("朝阳区","chaoyang"));
		p1.addCity(new City("西城区","xiCheng"));
		
		Province p2=new Province("内蒙古");
		p2.addCity(new City("呼和浩特","huhehaote"));
		p2.addCity(new City("包头","baotou"));
		
		List<Province> list=new ArrayList<Province>();
		list.add(p1);
		list.add(p2);
		
		return list;
	}
	
	@Test
	public void fun1(){
		List<Province> provinces=getProinvceList();
		/*
		 * 创建XStream对象
		 * 调用toXML把集合转换成xml字符串
		 */
		XStream xstream=new XStream();
		System.out.println(xstream.toXML(provinces));
	}
	
	/*
	 * 别名(alias)
	 * 希望:
	 * * 默认List类型对应<list>元素,希望让List类型对应<china>元素
	 * * 默认Province类型对应<demo1.Province>,希望让它对应<province>
	 * * 默认City类型对应<demo1.City>,希望它对应<city>元素
	 */
	
	@Test
	public void fun2(){
		List<Province> provinces=getProinvceList();
		
		/*
		 * 创建XStream对象
		 * 调用toXML把集合转换成xml字符串
		 */		
		XStream xstream=new XStream();
		xstream.alias("china",List.class);
		xstream.alias("province",Province.class);
		xstream.alias("city",City.class);
		
		System.out.println(xstream.toXML(provinces));
	}
	
	@Test
	public void fun3(){
		List<Province> provinces=getProinvceList();
		
		/*
		 * 创建XStream对象
		 * 调用toXML把集合转换成xml字符串
		 */		
		XStream xstream=new XStream();
		xstream.alias("china",City.class);
		/*
		 * 把Province类型的name属性,生成<province>元素的属性
		 */
		xstream.useAttributeFor(Province.class,"name");
		
		System.out.println(xstream.toXML(provinces));
	}
	
	/*
	 * 去掉List类型的属性
	 */
	@Test
	public void fun4(){
		List<Province> provinces=getProinvceList();
			
		XStream xstream=new XStream();
		xstream.alias("china",City.class);
		xstream.useAttributeFor(Province.class,"name");
		/*
		 * 去掉<cities>这样的Collection属性
		 */
		xstream.addImplicitCollection(Province.class,"cities");
		
		System.out.println(xstream.toXML(provinces));
	}
	
	/*
	 * /**
	 * 去除不想要的javabean属性,不生成对应的xml元素!
	 */
	@Test
	public void fun5(){
		List<Province> provinces=getProinvceList();
			
		XStream xstream=new XStream();
		xstream.alias("china","name");
		xstream.addImplicitCollection(Province.class,"cities");
		
		/*
		 * 让City类的,名为description属性不生成对应的xml元素
		 */
		xstream.omitField(City.class,"description");
		
		System.out.println(xstream.toXML(provinces));
	}
	
	
	
}

Ajax——XStream的更多相关文章

  1. XStream使用方法总结附实例代码

    XStream是一个Java对象和XML相互转换的工具,很好很强大。提供了所有的基础类型、数组、集合等类型直接转换的支持。因此XML常用于数据交换、对象序列化(这种序列化和Java对象的序列化技术有着本质的区别)。

  2. Xstream 1.4.20和Jettisons 1.5.3的反序列化失败

    下面的代码反序列化了我的代码,并为Jettisons1.2版返回HashMap。但当我将弃船切换到1.5.3时,除了下面提到的例外,这段代码中断了。--main.class--人员类别--1.2次抛投的输出--1.5.3抛投的输出我尝试过Jackson的ObjectMapper,但它在反序列化时返回LinkedHashMap。

  3. Ajax学习三:XML及Json与Ajax配合使用

    Ajax学习(三):XML及Json与Ajax配合使用目录:1、XML的序列化与反序列化定义:2、XStream的作用:3、XStream的必导jar包:4、XStream使用步骤:5、XStream常用方法:6、Json定义:7、eval函数转化Json字符串的时候外面为什么要包装一层圆括号?

  4. Ajax——XStream

    XStream1.什么作用*可以把JavaBean转换为xml2.XStream的jar包*核心jar包:xstream-1.4.7.jar;*必须依赖包:xpp3_min-1.1.4c;3.使用步骤*XStreamxstream=newXStream();*StringxmlStr=xstream.toXML;4.使用细节*别名:把类型对应的元素名修改了>xstream.alias:让List类型生成的元素名为china>xstream.alias:让Province类型生成的元素名为province*

  5. Ajax返回XML数据

    *XMLHttpRequest对象的responseXML属性:XML格式*服务器端:*设置响应首部信息,"Content-Type"为"text/xml"*手工构建一个xml格式的数据内容*如何将javabean、List、Array和Map集合转换成xml数据格式?

  6. java – XStream序列化空值

    假设我有然后:}给我:有没有办法处理空值?

  7. java – 使用RESTlet,XStream注释似乎没有任何效果

    在我的POJO中使用@XStreamOmitField似乎没有任何影响.注释的字段仍然被暴露在xml或json表示中.并在ServerResource中得到我任何想法为什么注释被忽略?解决方法你必须告诉XStream来明确处理注释:或者,您应该添加此代码来告诉XStream处理所有注释:

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部