重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本文章向大家介绍怎么在java中利用JAXB将对象和xml进行转换的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
创新互联是一家专业提供黄石企业网站建设,专注与网站设计制作、网站建设、H5网站设计、小程序制作等业务。10年已为黄石众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。
Java的特点有哪些 1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。 2.Java具有简单性、面向对象、分布式、安全性、平台独立与可移植性、动态性等特点。 3.使用Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
在使用WebService实现数据上传下载,数据查询时,可以利用JAXB实现java实体类和xml互相转换
包含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 Listlist; @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 + "]"; } }
注意: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 + "]"; } }
自定义时间适配器类
在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; } }
用来封装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; } }
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; } }
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集合一样 ArrayListlist = 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
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进行转换的全部内容了,希望大家多多支持创新互联!