最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java利用JAXB實(shí)現(xiàn)對象和xml互相轉(zhuǎn)換方法與實(shí)例詳解

 更新時(shí)間:2020年02月20日 14:42:52   作者:壞~牧羊人  
這篇文章主要介紹了java利用JAXB實(shí)現(xiàn)對象和xml互相轉(zhuǎn)換方法與實(shí)例詳解,需要的朋友可以參考下

1、JAXB應(yīng)用場景

在使用WebService實(shí)現(xiàn)數(shù)據(jù)上傳下載,數(shù)據(jù)查詢時(shí),可以利用JAXB實(shí)現(xiàn)java實(shí)體類和xml互相轉(zhuǎn)換

2、Demo

2.1 student.java 實(shí)體類

包含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節(jié)點(diǎn)順序
@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節(jié)點(diǎn),因?yàn)槟康氖寝D(zhuǎn)成一個(gè)XML文檔,根節(jié)點(diǎn)只有一個(gè)

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

自定義時(shí)間適配器類

在java實(shí)體類序列化xml日期時(shí),需要對時(shí)間進(jìn)行自定義轉(zhuǎn)換,jaxb提供了XmlAdapter,只要實(shí)現(xiàn)它后就可以自定義日期適配器

package jaxb;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.xml.bind.annotation.adapters.XmlAdapter;

public class DateAdapter extends XmlAdapter<String, Date> {
  //反序列化成日期對象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 轉(zhuǎn)換器

本人在寫map轉(zhuǎn)換器之后,感覺跟jaxb 默認(rèn)序列化的方式?jīng)]什么區(qū)別,目前還不知道在javb中需不需要特地寫map轉(zhuǎn)換器,希望有經(jīng)驗(yàn)的朋友分享下

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<MapAdapter.AdapterMap,Map<String,Object>> {

  public static class AdapterMap {
    public List<Entry> entry =new ArrayList<Entry>();  
  }
  /**
   * 功能:xml->Map<String,Object>
   * @param adapterMap
   * @return
   * @throws Exception
   */
  @Override
  public Map<String, Object> unmarshal(AdapterMap adapterMap) throws Exception {
    Map<String, Object> map = new HashMap<String, Object>();
    List entry = adapterMap.entry;
    for(Entry en:adapterMap.entry){
      map.put(en.getKey(), en.getValue());
    }
    return map;
  }
  /**
   * 功能:map<String,Object> -> xml
   */
  @Override
  public AdapterMap marshal(Map<String, Object> map) throws Exception {
    AdapterMap adapterMap = new AdapterMap();
    for (Map.Entry<String, Object> 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<Teacher> list = new ArrayList<Teacher>();
    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<Object, Object> map = new HashMap<>();
    map.put("1", "林樂賢");
    map.put("2", "德甲");
    stu.setMap(map);
    try {
    JAXBContext context = JAXBContext.newInstance(Student.class);
    Marshaller marshaller = context.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    marshaller.setProperty(Marshaller.JAXB_ENCODING, "GBK");
    //marshaller.marshal(stu, System.out);
    StringWriter writer = new StringWriter();
    marshaller.marshal(stu, writer);
    System.out.println(writer.toString());
    //反序列化
    Unmarshaller unmarshaller = context.createUnmarshaller();
    StringReader reader = new StringReader(writer.toString());
    Student stu2 = (Student) unmarshaller.unmarshal(reader);
    System.out.println("stu2"+stu2);
  } catch (JAXBException e) {
    e.getMessage();
    e.printStackTrace();
  }
  }
}

3.測試結(jié)果

<?xml version="1.0" encoding="GBK" standalone="yes"?>
<student>
  <id>1</id>
  <name>羅志茂</name>
  <age>25</age>
  <birthDay>2016-08-18 23:07:26</birthDay>
  <list>
    <id>2</id>
    <name>曾利梅</name>
    <age>22</age>
  </list>
  <list>
    <id>3</id>
    <name>黃伙林</name>
    <age>22</age>
  </list>
  <list>
    <id>4</id>
    <name>潘志華</name>
    <age>22</age>
  </list>
  <teacher>
    <id>1</id>
    <name>宋瑤</name>
    <age>22</age>
  </teacher>
  <map>
    <entry>
      <key>2</key>
      <value xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">德甲</value>
    </entry>
    <entry>
      <key>1</key>
      <value xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">林樂賢</value>
    </entry>
  </map>
</student>

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=林樂賢}]

更多關(guān)于java利用JAXB實(shí)現(xiàn)對象和xml互相轉(zhuǎn)換方法與實(shí)例請查看下面的相關(guān)鏈接

相關(guān)文章

  • Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之在線高中考試系統(tǒng)的實(shí)現(xiàn)

    Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之在線高中考試系統(tǒng)的實(shí)現(xiàn)

    這是一個(gè)使用了java+SSM+Jsp+Mysql+Maven開發(fā)的在線高中考試系統(tǒng),是一個(gè)畢業(yè)設(shè)計(jì)的實(shí)戰(zhàn)練習(xí),具有考試系統(tǒng)該有的所有功能,感興趣的朋友快來看看吧
    2022-02-02
  • Java數(shù)組的基本學(xué)習(xí)教程

    Java數(shù)組的基本學(xué)習(xí)教程

    這篇文章主要介紹了Java數(shù)組的基本學(xué)習(xí)教程,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10
  • JAVA構(gòu)造函數(shù)(方法)示例詳解

    JAVA構(gòu)造函數(shù)(方法)示例詳解

    構(gòu)造函數(shù),是一種特殊的方法,主要用來在創(chuàng)建對象時(shí)初始化對象,即為對象成員變量賦初始值,總與new運(yùn)算符一起使用在創(chuàng)建對象的語句中,這篇文章主要給大家介紹了關(guān)于JAVA構(gòu)造函數(shù)(方法)的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • IDEA中Services欄不顯示的解決方案小結(jié)

    IDEA中Services欄不顯示的解決方案小結(jié)

    正常編譯完一個(gè)SpringBoot或者SringCloud項(xiàng)目之后,Services都會(huì)顯示出你有哪些服務(wù),如果沒有services欄怎么解決呢?下面小編給大家分享IDEA中Services欄不顯示的解決方案小結(jié),感興趣的朋友一起看看吧
    2021-08-08
  • java實(shí)現(xiàn)解析Cron時(shí)間表達(dá)式為中文描述

    java實(shí)現(xiàn)解析Cron時(shí)間表達(dá)式為中文描述

    這篇文章主要為大家詳細(xì)介紹了java如何實(shí)現(xiàn)解析Cron時(shí)間表達(dá)式為中文描述,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下
    2023-11-11
  • JAVA注解代碼詳解一篇就夠了

    JAVA注解代碼詳解一篇就夠了

    這篇文章主要介紹了Java注解詳細(xì)介紹,本文講解了Java注解是什么、Java注解基礎(chǔ)知識、Java注解類型、定義Java注解類型的注意事項(xiàng)等內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • FasfDFS整合Java實(shí)現(xiàn)文件上傳下載功能實(shí)例詳解

    FasfDFS整合Java實(shí)現(xiàn)文件上傳下載功能實(shí)例詳解

    這篇文章主要介紹了FasfDFS整合Java實(shí)現(xiàn)文件上傳下載功能實(shí)例詳解,需要的朋友可以參考下
    2017-08-08
  • Minio?上傳文件請求負(fù)載原理解析

    Minio?上傳文件請求負(fù)載原理解析

    MinIO集群通過分布式存儲和負(fù)載均衡機(jī)制實(shí)現(xiàn)文件上傳請求的分發(fā),核心原理包括數(shù)據(jù)分片和冗余、負(fù)載均衡、一致性哈希和并行處理,Java示例展示了如何實(shí)現(xiàn)文件上傳分發(fā)邏輯,感興趣的朋友一起看看吧
    2025-03-03
  • java org.springframework.boot 對redis操作方法

    java org.springframework.boot 對redis操作方法

    在Spring Boot項(xiàng)目中操作Redis,你可以使用Spring Data Redis,Spring Data Redis是Spring提供的一個(gè)用于簡化Redis數(shù)據(jù)訪問的模塊,它提供了一個(gè)易于使用的編程模型來與Redis交互,本文給大家介紹java org.springframework.boot 對redis操作方法,感興趣的朋友一起看看吧
    2025-04-04
  • java jvm兩種存儲區(qū)的類型知識點(diǎn)講解

    java jvm兩種存儲區(qū)的類型知識點(diǎn)講解

    在本篇文章里小編給大家整理的是一篇關(guān)于java jvm兩種存儲區(qū)的類型知識點(diǎn)講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-03-03

最新評論

桂东县| 盐山县| 平和县| 锡林郭勒盟| 大城县| 马公市| 七台河市| 崇阳县| 若尔盖县| 凤山市| 临澧县| 宁武县| 类乌齐县| 富顺县| 新干县| 兴和县| 亳州市| 平武县| 永靖县| 西平县| 汉源县| 佳木斯市| 祥云县| 米脂县| 文安县| 西贡区| 永昌县| 秦安县| 勐海县| 奎屯市| 西青区| 汝州市| 湖州市| 克东县| 塔河县| 正安县| 固安县| 东乌| 西畴县| 鹤庆县| 崇阳县|