实体类如下:

package com.cn.entity;

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "person")
@XmlAccessorType(XmlAccessType.NONE)
public class Person { //姓名
@XmlElement(name = "newName")
private String name; //性别
@XmlElement(name = "sex_1")
private String sex; //年龄
@XmlElement
private int age; //地址
@XmlElementWrapper(name = "Address")
@XmlElement(name = "address")
private List<Address> Address; get...
set...
}
package com.cn.entity;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlType(propOrder={"country","province","city","county","town"})
public class Address { //国
//@XmlElement(name = "country000")
private String country;
//省
//@XmlElement
private String province;
//市
//@XmlElement
private String city;
//县
//@XmlElement
private String county;
//镇
//@XmlElement(required = true)
private String town; get...
set...
}

JAXB工具类:

package com.cn.util;

import java.io.StringReader;
import java.io.StringWriter; import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller; import org.apache.log4j.Logger; /**
* JAXB工具类
* @author sun.kai
* 2016年8月18日
*/
public class JaxbUtil {
private static Logger logger = Logger.getLogger(JaxbUtil.class);
private static JAXBContext jaxbContext; //xml转java对象
@SuppressWarnings("unchecked")
public static <T> T xmlToBean(String xml,Class<T> c){
T t = null;
try {
jaxbContext = JAXBContext.newInstance(c);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
t = (T) unmarshaller.unmarshal(new StringReader(xml));
} catch (JAXBException e) {
logger.info(e.getMessage());
}
return t;
} //java对象转xml
public static String beanToXml(Object obj){
StringWriter writer = null;
try {
jaxbContext=JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = jaxbContext.createMarshaller();
//Marshaller.JAXB_FRAGMENT:是否省略xml头信息,true省略,false不省略
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
//Marshaller.JAXB_FORMATTED_OUTPUT:决定是否在转换成xml时同时进行格式化(即按标签自动换行,否则即是一行的xml)
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
//Marshaller.JAXB_ENCODING:xml的编码方式
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
writer = new StringWriter();
marshaller.marshal(obj, writer);
} catch (JAXBException e) {
logger.info(e.getMessage());
}
return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + writer.toString();
}
}

测试用例:

package com.test.test;

import java.util.ArrayList;
import java.util.List; import com.cn.entity.Address;
import com.cn.entity.Person;
import com.cn.util.JaxbUtil; public class TestJaxb { public static void main(String[] args) {
long time1 = System.currentTimeMillis();
//测试java对象转xml,java对象中包含集合对象
Person person = new Person();
person.setName("admin管理员");
person.setSex("男");
person.setAge(25);
List<Address> adds = new ArrayList<Address>();
Address address1 = new Address();
address1.setCountry("中国");
address1.setProvince("安徽");
address1.setCity("宿州");
address1.setCounty("萧县");
Address address2 = new Address();
address2.setCountry("中国");
address2.setProvince("上海");
address2.setCity(null);
address2.setCounty("");
adds.add(address1);
adds.add(address2);
person.setAddress(adds);
String xml = JaxbUtil.beanToXml(person);
System.out.println(xml); //测试xml转java对象
Person person2 = JaxbUtil.xmlToBean(xml,Person.class);
System.out.println(person2.getAddress().get(0).getCountry());
System.out.println(person2.getAddress().get(1).getProvince()); long time2 = System.currentTimeMillis();
System.out.println((time2-time1)+"ms");
}
}

执行后控制台打印:

<?xml version="1.0" encoding="UTF-8"?>
<person>
<newName>admin管理员</newName>
<sex_1>男</sex_1>
<age>25</age>
<Address>
<address>
<country>中国</country>
<province>安徽</province>
<city>宿州</city>
<county>萧县</county>
</address>
<address>
<country>中国</country>
<province>上海</province>
<county></county>
</address>
</Address>
</person>
中国
上海
531ms

总结:

(1) @XmlRootElement:根节点,且可以增加属性(name="NewRootElementName"),那么生成的xml串的标签别名是NewRootElementName。
(2) @XmlAttribute:该属性作为xml的属性,且可以增加属性(name="NewAttributeName"),那么生成的xml串的标签别名是NewAttributeName。
(3) @XmlElement:该属性作为xml的元素,且可以增加属性(name="NewElementName"),那么生成的xml串的标签别名是NewElementName。
(4) @XmlElementWrapper:对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合的XML元素(称为包装器。如果不加该注解,集合中的每个对象的父节点不是List了,而是Class。
(5) @XmlType,将Java类或枚举类型映射到XML模式类型。
(6) @XmlAccessorType(XmlAccessType.FIELD) ,控制字段或属性的序列化。
        XmlAccessType.FIELD表示JAXB将自动绑定Java类中的每个非静态的(static)、非瞬态的(由@XmlTransient标 注)字段到XML,即使在java对象中的属性上不加注解@XmlElement等也可以转成XML对象。
        XmlAccessType.NONE表示JAXB不自动绑定属性字段到XML,所以需要在需要转换的属性上加上注解@XmlElement才能转成XML对象。
        XmlAccessType.PROPERTY表示只有属性(有get/set方法)才能被转换成XML中的标签,并且属性上不许有注解@XmlElement等,除非用@XmlTransient注释。
        XmlAccessType.PUBLIC_MEMBER表示每个公共(public)获取(get)方法/设置(set)方法对和每个公共字段将会自动绑定到 XML,除非由@XmlTransient注释。
(7) @XmlAccessorOrder,控制JAXB 绑定类中属性和字段的排序。
(8) @XmlJavaTypeAdapter,使用定制的适配器(即扩展抽象类XmlAdapter并覆盖marshal()和unmarshal()方法),以序列化Java类为XML
(9) 对于根节点中的对象,在该对象类上用@XmlRootElement设置别名没有作用。

JAXB轻松转换xml对象和java对象的更多相关文章

  1. XML字符串和JAVA对象之间的转化

     1.JAXB中相关的注解.类和接口说明 JAXB 中主要的一些注解 - shenyunsese 的专栏 - CSDN 博客 注:教程很全面很详细.但是仅供参考. 主要疑问区分和说明:  1.1 @X ...

  2. java json数据转List对象的集合-----阿里巴巴插件---及原生json---JSON 与 对象 、集合 之间的转换 JSON字符串和java对象的互转【json-lib】

    List<RunfastFullLess> list=(List<RunfastFullLess>)JSONArray.parseObject(activity.getFull ...

  3. JSON串、JSON对象、Java对象的相互转换

    对象类型转换2: com.alibaba.fastjson.JSONObject时经常会用到它的转换方法,包括Java对象转成JSON串.JSON对象,JSON串转成java对象.JSON对象,JSO ...

  4. JSON串、JSON对象、Java对象的相互转换2

    对象类型转换: 1.Java对象-->JSON对象2.Java对象-->JSON字符串 3.JSON对象-->JSON字符串 4.JSON对象-->Java对象 5.JSON字 ...

  5. XStream轻松转换xml和java对象

    首先引入所需的jar: xstream-1.4.9.xpp3_min-1.1.4c.dom4j-1.6.1, 或用maven管理jar包时在pom.xml中添加: <!-- https://mv ...

  6. Java对象转换成xml对象和Java对象转换成JSON对象

    1.把Java对象转换成JSON对象 apache提供的json-lib小工具,它可以方便的使用Java语言来创建JSON字符串.也可以把JavaBean转换成JSON字符串. json-lib的核心 ...

  7. Spring 整合 Flex (BlazeDS)无法从as对象 到 Java对象转换的异常:org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.util.Date' to required type 'java.sql.Timestamp' for property 'wfsj'; nested exception is java.lang.Ill

    异常信息如下: org.springframework.beans.ConversionNotSupportedException: Failed to convert property value ...

  8. Java对象转xml报文和xml报文转Java对象帮助类

    import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marsha ...

  9. 转载-------- JSON 与 对象 、集合 之间的转换 JSON字符串和java对象的互转【json-lib】

    转载--*--*---- 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,J ...

随机推荐

  1. IOS KVO的实现原理

    #import "HMViewController.h" #import "HMPerson.h" @interface HMViewController () ...

  2. datatable Left and right fixed columns

    $(document).ready(function() { var table = $('#example').DataTable( { scrollY: "300px", sc ...

  3. HDU 1754 I Hate It 【线段树单点修改 维护区间最大值】

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1754 I Hate It Time Limit: 9000/3000 MS (Java/Others ...

  4. 【题解】UVA1218 Perfect Service

    UVA1218:https://www.luogu.org/problemnew/show/UVA1218 刷紫书DP题ing 思路 参考lrj紫书 不喜勿喷 d(u,0):u是服务器,孩子是不是服务 ...

  5. CodeForces - 348A Mafia (巧妙二分)

    传送门: http://codeforces.com/problemset/problem/348/A A. Mafia time limit per test 2 seconds memory li ...

  6. BionicApi 学习笔记

    1.内存管理 malloc, realloc, free new, delete2.文件输入操作 fopen, fwrite, fputs, fputc, fprintf, fflush fread, ...

  7. CentOS 7设置网卡开机自动启用

    一.查看网卡配置 root权限 [root@dbsyn ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue ...

  8. IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息

    IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息 /**当获取到定位的坐标后,回调函数*/ - (void)didUpdateBMKUserLocation:(BMKUserLocati ...

  9. java面向对象编程思想的理解

    1.我们总说java是一门面向对象编程的语言,那什么是面向对象呢? 我是这样理解的,对象是事物存在的实体,如,猪.狗,花早等都是对象,对象由两部分组成.面向对象编程的三大特点:继承,多态,类是封装对象 ...

  10. iOS之一些实用的Demo

    图像浏览及处理 FLAnimatedImage - gif播放处理的工具. CLImageEditor - 超强的图片编辑库,快速帮你实现旋转,防缩,滤镜等等一系列麻烦的事情. ios-image-f ...