java利用JAXB实现对象和xml互相转换方法与实例详解

2020-02-20 20:02:06王冬梅

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<Teacher> 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 + "]";
}

}