xml转为javaBean
2016-01-04 17:22
387 查看
1.Xstream简介;
使用限制:JDK版本不能<1.5.
虽然预处理注解是安全的,但自动侦查注解可能发生竞争条件.
特点:
简化的API;
无映射文件;
高性能,低内存占用;
整洁的XML;
不需要修改对象;支持内部私有字段,不需要setter/getter方法,final字段;非公有类,内部类;类不需要默认构造器,完全对象图支持.维护对象引用计数,循环引用.i
提供序列化接口;
自定义转换类型策略;
详细的错误诊断;
快速输出格式;当前支持JSON和morphing.
使用场景
Transport转换
Persistence持久化对象
Configuration配置
UnitTests单元测
隐式集合
当我们使用集合类时不想显示集合,只显示里面的元素即可.
使用隐式集合前:
<list>
<element/>
<element/>
<list>
使用隐式集合:
xstream.addImplicitCollection(Person.class,"list");
使用隐式集合后:
<element/>
<element/>
2.Xstream注解常用知识:
@XStreamAlias("message")别名注解
作用目标:类,字段
@XStreamImplicit隐式集合(例如list集合)
@XStreamImplicit(itemFieldName="part")
作用目标:集合字段
@XStreamConverter(SingleValueCalendarConverter.class)注入转换器
作用目标:对象
@XStreamAsAttribute转换成属性
作用目标:字段
@XStreamOmitField忽略字段
作用目标:字段
Auto-detectAnnotations自动侦查注解
xstream.autodetectAnnotations(true);
自动侦查注解与XStream.processAnnotations(Class[]cls)的区别在于性能.自动侦查注解将缓存所有类的类型.
3.案例分析:(1)同一标签下多个同名元素;
(2)同一标签下循环多个对象;
案例:
使用限制:JDK版本不能<1.5.
虽然预处理注解是安全的,但自动侦查注解可能发生竞争条件.
特点:
简化的API;
无映射文件;
高性能,低内存占用;
整洁的XML;
不需要修改对象;支持内部私有字段,不需要setter/getter方法,final字段;非公有类,内部类;类不需要默认构造器,完全对象图支持.维护对象引用计数,循环引用.i
提供序列化接口;
自定义转换类型策略;
详细的错误诊断;
快速输出格式;当前支持JSON和morphing.
使用场景
Transport转换
Persistence持久化对象
Configuration配置
UnitTests单元测
隐式集合
当我们使用集合类时不想显示集合,只显示里面的元素即可.
使用隐式集合前:
<list>
<element/>
<element/>
<list>
使用隐式集合:
xstream.addImplicitCollection(Person.class,"list");
使用隐式集合后:
<element/>
<element/>
2.Xstream注解常用知识:
@XStreamAlias("message")别名注解
作用目标:类,字段
@XStreamImplicit隐式集合(例如list集合)
@XStreamImplicit(itemFieldName="part")
作用目标:集合字段
@XStreamConverter(SingleValueCalendarConverter.class)注入转换器
作用目标:对象
@XStreamAsAttribute转换成属性
作用目标:字段
@XStreamOmitField忽略字段
作用目标:字段
Auto-detectAnnotations自动侦查注解
xstream.autodetectAnnotations(true);
自动侦查注解与XStream.processAnnotations(Class[]cls)的区别在于性能.自动侦查注解将缓存所有类的类型.
3.案例分析:(1)同一标签下多个同名元素;
(2)同一标签下循环多个对象;
案例:
import java.util.List; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamImplicit; /** *@ClassName:PersonBean *@author: *@date *@Description:TODO */ @XStreamAlias ( "person" ) public class PersonBean { @XStreamAlias ( "firstName" ) private String firstName; @XStreamAlias ( "lastName" ) private String lastName; @XStreamAlias ( "telphone" ) private PhoneNumber tel; @XStreamAlias ( "faxphone" ) private PhoneNumber fax; //测试一个标签下有多个同名标签 @XStreamAlias ( "friends" ) private Friends friend; //测试一个标签下循环对象 @XStreamAlias ( "pets" ) private Pets pet; //省略setter和getter } |
2.[代码]2.实体类:PhoneNumber
1 2 3 4 5 6 7 8 9 10 | @XStreamAlias ( "phoneNumber" ) public class PhoneNumber{ @XStreamAlias ( "code" ) private int code; @XStreamAlias ( "number" ) private String number; //省略setter和getter } |
3.[代码]3.实体类:Friends(一个标签下有多个同名标签)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | /** * 用Xstream注解的方式实现:一个标签下有多个同名标签 *@ClassName:Friends *@author: *@date *@Description:TODO *http://blog.csdn.net/menhuanxiyou/article/details/5426765 */ public static class Friends{ @XStreamImplicit (itemFieldName= "name" ) //itemFieldName定义重复字段的名称, /*<friends> <friends> <name>A1</name> <String>A1</String> <name>A2</name> <name>A3</name> <String>A1</String> </friends> </friends> */ private List<String> name; public List<String> return name; } public void setName(List<String> this .name } } |
4.[代码]4.1实体类:Animal(同一标签下循环对象实体1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | //测试同一标签下循环某一对象 public class Animal{ @XStreamAlias ( "name" ) private String name; @XStreamAlias ( "age" ) private int age; public Animal(String name, int age){ this .name=name; this .age=age; } //省略setter和getter } |
5.[代码]4.2实体类:Pets(同一标签下循环对象实体2)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /** * 测试同一标签下循环某一对象 *@ClassName:Pets *@author: *@date *@Description:TODO */ public class Pets{ @XStreamImplicit (itemFieldName= "pet" ) private List<Animal> animalList; public List<Animal> return animalList; } public void setAnimalList(List<Animal> this .animalList } } |
6.[代码]5.main函数示例1:toxml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.json.JsonWriter.Format; import com.thoughtworks.xstream.io.xml.DomDriver; /** *@ClassName:PersonTest *@author: *@date *@Description:TODO */ public class PersonTest { /** * * * * */ public static void main(String[] // PersonBean per= new PersonBean(); per.setFirstName( "chen" ); per.setLastName( "youlong" ); PhoneNumber tel= new PhoneNumber(); tel.setCode( 137280 ); tel.setNumber( "137280968" ); PhoneNumber fax= new PhoneNumber(); fax.setCode( 20 ); fax.setNumber( "020221327" ); per.setTel(tel); per.setFax(fax); //测试一个标签下有多个同名标签 List<String> friendList= new ArrayList<String>(); friendList.add( "A1" ); friendList.add( "A2" ); friendList.add( "A3" ); Friends friend1= new Friends(); friend1.setName(friendList); per.setFriend(friend1); //测试一个标签下循环对象 Animal dog= new Animal( "Dolly" , 2 ); Animal cat= new Animal( "Ketty" , 2 ); List<Animal> petList= new ArrayList<Animal>(); petList.add(dog); petList.add(cat); Pets pet= new Pets(); pet.setAnimalList(petList); per.setPet(pet); //java对象转换成xml String xml=XmlUtil.toXml(per); System.out.println( "xml===" +xml); } } |
7.[代码]xml效果图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | xml===<person> <firstName>chen</firstName> <lastName>youlong</lastName> <telphone> <code> 137280 </code> <number> 137280968 </number> </telphone> <faxphone> <code> 20 </code> <number> 020221327 </number> </faxphone> <friends> <name>A1</name> <name>A2</name> <name>A3</name> </friends> <pets> <pet> <name>doly</name> <age> 2 </age> </pet> <pet> <name>Ketty</name> <age> 2 </age> </pet> </pets> </person> |
相关文章推荐
- JDK源码分析—— ArrayBlockingQueue 和 LinkedBlockingQueue
- java enum 一个枚举类型
- java.lang.UnsupportedClassVersionError: : Unsupported major.minor version
- springmvc数组参数传递
- java 处理高精度计算问题
- Java动态创建类
- JAVAWeb使用POI做导出Excel
- Java中的各种加密算法
- Java数组操作的10大方法
- struts2常用标签总结
- java 集合
- Atitit.java swing打印功能 api attilax总结
- Atitit.java swing打印功能 api attilax总结
- Atitit.java swing打印功能 api attilax总结
- java.lang.OutOfMemoryError: Java heap space
- java中的静态变量、静态方法与静态代码块详解与初始化顺序
- 一些java资源
- Java 调用 js 中的方法
- weblogic 服务不响应java.net.SocketTimeoutException: Read timed out
- [java] jstack 查看死锁问题