本文章向大家介绍怎么在java中利用JAXB将对象和xml进行转换的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

创新互联是一家专业提供黄石企业网站建设,专注与网站设计制作、网站建设、H5网站设计、小程序制作等业务。10年已为黄石众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。
Java的特点有哪些
Java的特点有哪些 1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。 2.Java具有简单性、面向对象、分布式、安全性、平台独立与可移植性、动态性等特点。 3.使用Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
1、JAXB应用场景
在使用WebService实现数据上传下载,数据查询时,可以利用JAXB实现java实体类和xml互相转换
2、Demo
2.1 student.java 实体类
包含list(set同理)、map、Teacher、Date 类型的属性
package jaxb;
import java.util.Date;
import java.util.List;
import java.util.Map;
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;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlType(propOrder={"id","name","age","birthDay","list","teacher","map"}) //指定序列成的xml节点顺序
@XmlAccessorType(value=XmlAccessType.FIELD) //访问类型改为字段
@XmlRootElement
public class Student {
@XmlElement
private String id;
@XmlElement
private String name;
@XmlElement
private int age;
@XmlJavaTypeAdapter(value=DateAdapter.class)
@XmlElement
private Date birthDay;
@XmlElement
private List list;
@XmlElement
private Teacher teacher;
@XmlJavaTypeAdapter(value=MapAdapter.class)
// @XmlElementWrapper(name="role")
@XmlElement
private Map map;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthDay() {
return birthDay;
}
public void setBirthDay(Date birthDay) {
this.birthDay = birthDay;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
public Map getMap() {
return map;
}
public void setMap(Map map) {
this.map = map;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age
+ ", birthDay=" + birthDay + ", list=" + list + ", teacher="
+ teacher + ", map=" + map + "]";
}
} 2.2 Teacher.java类
注意:Teacher 类不包含@XmlRootElement节点,因为目的是转成一个XML文档,根节点只有一个
package jaxb;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(value=XmlAccessType.FIELD)
@XmlType(propOrder={"id","name","age"})
public class Teacher {
@XmlElement
private int id;
@XmlElement
private String name;
@XmlElement
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Teacher(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public Teacher() {
}
@Override
public String toString() {
return "Teacher [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}2.3 DateApdapter.java
自定义时间适配器类
在java实体类序列化xml日期时,需要对时间进行自定义转换,jaxb提供了XmlAdapter,只要实现它后就可以自定义日期适配器
package jaxb; import java.text.SimpleDateFormat; import java.util.Date; import javax.xml.bind.annotation.adapters.XmlAdapter; public class DateAdapter extends XmlAdapter{ //反序列化成日期对象Date @Override public Date unmarshal(String str) throws Exception { SimpleDateFormat format = getSimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return str==null ? null:format.parse(str); } //序列化成xmL @Override public String marshal(Date date) throws Exception { SimpleDateFormat format = getSimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return date==null ? "":format.format(date); } private SimpleDateFormat getSimpleDateFormat(String pattern){ SimpleDateFormat format = new SimpleDateFormat(pattern); return format; } }
2.4 Entry.java类
用来封装map元素
package jaxb;
public class Entry {
private String key;
private Object value;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
}2.5、MapAdpter.java
map 转换器
本人在写map转换器之后,感觉跟jaxb 默认序列化的方式没什么区别,目前还不知道在javb中需不需要特地写map转换器,希望有经验的朋友分享下
package jaxb; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.xml.bind.annotation.adapters.XmlAdapter; public class MapAdapter extends XmlAdapter> { public static class AdapterMap { public List entry =new ArrayList (); } /** * 功能:xml->Map * @param adapterMap * @return * @throws Exception */ @Override public Map unmarshal(AdapterMap adapterMap) throws Exception { Map map = new HashMap (); List entry = adapterMap.entry; for(Entry en:adapterMap.entry){ map.put(en.getKey(), en.getValue()); } return map; } /** * 功能:map -> xml */ @Override public AdapterMap marshal(Map map) throws Exception { AdapterMap adapterMap = new AdapterMap(); for (Map.Entry entry : map.entrySet()) { Entry entry2 = new Entry(); entry2.setKey(entry.getKey()); entry2.setValue(entry.getValue()); adapterMap.entry.add(entry2); } return adapterMap; } }
2.6 测试类 JaxbDemo.java
package jaxb;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
public class JaxbDemo {
public static void main(String[] args) {
Student stu = new Student();
stu.setId("1");
stu.setName("罗志茂");
stu.setAge(25);
stu.setBirthDay(new Date());
//list集合,set集合一样
ArrayList list = new ArrayList();
list.add(new Teacher(2,"曾利梅",22));
list.add(new Teacher(3,"黄伙林",22));
list.add(new Teacher(4,"潘志华",22));
stu.setList(list);
//在javaBean中添加javaBean
Teacher teacher = new Teacher(1,"宋瑶",22);
stu.setTeacher(teacher);
//添加map集合
HashMap 3.测试结果
1 罗志茂 25 2016-08-18 23:07:26
2 曾利梅 22
3 黄伙林 22
4 潘志华 22 1 宋瑶 22
stu2Student [id=1, name=罗志茂, age=25, birthDay=Thu Aug 18 23:07:26 CST 2016, list=[Teacher [id=2, name=曾利梅, age=22], Teacher [id=3, name=黄伙林, age=22], Teacher [id=4, name=潘志华, age=22]], teacher=Teacher [id=1, name=宋瑶, age=22], map={2=德甲, 1=林乐贤}]
以上就是小编为大家带来的怎么在java中利用JAXB将对象和xml进行转换的全部内容了,希望大家多多支持创新互联!
新闻名称:怎么在java中利用JAXB将对象和xml进行转换
文章URL:http://www.jxjierui.cn/article/ppodhp.html


咨询
建站咨询
