Java 中Xml與物件的互轉
在java開發中我們經常會遇到Xml與物件互相轉換的情況,尤其是針對WebService訪問時會涉及到xml與物件的轉換問題。目前可以用於xml與物件互轉的方式有很多這裡採用jdk自帶的JAXB來進行。
對於jaxb的介紹我就不用過多的介紹了,網上這方面的資料非常多我這裡就是介紹如何利用jaxb來實現java物件與xml彼此之間轉換的問題。
我們還是參照程式碼來進行講解,程式碼環境
spring boot
首先我們看我們有這麼一個xml字串
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><user ><userid>972a716fcfde4e098fda9bde13f8d31d</userid><username>a001</username><realname>江文軒</realname></user>
那麼我們要定義一個類同時這個類中的資料要與xml字串中的屬性進行對應
package com.spring.storeage.entity;
import javax.persistence.*;
import javax.xml.bind.annotation.*;
import java.util.Objects;
/**
* com.spring.entity
* @author chengjian
* 2017/12/23
**/
@Entity
@Table(name = "user", schema = "spring", catalog = "")
@XmlRootElement(name = "user")
@XmlType(propOrder = {"userid","username","userpwd","realname"})
public class UserEntity {
private String userid;
private String username;
private String userpwd;
private String realname;
@Id
@Column(name = "userid", nullable = false, length = 50)
@XmlElement(name = "userid")
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
@Basic
@Column(name = "username", nullable = false, length = 50)
@XmlElement(name = "username")
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Basic
@Column(name = "userpwd", nullable = false, length = 50)
@XmlElement(name = "userpwd")
public String getUserpwd() {
return userpwd;
}
public void setUserpwd(String userpwd) {
this.userpwd = userpwd;
}
@Basic
@Column(name = "realname", nullable = true, length = 200)
@XmlElement(name = "realname")
public String getRealname() {
return realname;
}
public void setRealname(String realname) {
this.realname = realname;
}
在程式碼中主要有這麼些註解
@XmlRootElement(name = “user”)
@XmlType(propOrder = {“userid”,”username”,”userpwd”,”realname”})
@XmlElement(name = “userid”)
首先@XmlRootElement(name = “user”)這個註解必須放在類宣告上,這說明了我們將這個類定義為可以與xml互相轉換,同時生成的xml根元素名稱叫user這與前面看到的xml字串中的內容一致。
然後我們又添加了這麼一個註解@XmlType(propOrder = {“userid”,”username”,”userpwd”,”realname”})這個註解我這裡標記的是生成的xml字串中屬性的排序,如果不新增propOrder那麼生成的xml字串中各屬性將是亂序的。
@XmlElement(name = “userid”)這個註解說明將userid欄位對映到生成xml字串中的useid屬性中
這樣我們就完成了實體上的定義,下面我們就看具體的轉換方法,很多時候我們都是將轉換方法設定為工具類,所以我定義了一個工具類作為轉換方法的載體,看下面程式碼
package com.spring.util;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.transform.stream.StreamResult;
import java.io.StringReader;
import java.io.StringWriter;
/**
* @author chengjian
* xml與實體物件轉換工具類
*/
public class XmlUtil {
/**
* xml字串轉換為實體物件
* @param xml
* @param clazz
* @return
*/
public static Object toObject(String xml,Class clazz) {
try {
JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
StringBuffer xmlStr = new StringBuffer( xml );
StringReader reader = new StringReader(xmlStr.toString());
Object obj = unmarshaller.unmarshal(reader);
return obj;
} catch (JAXBException e) {
e.printStackTrace();
return null;
}
}
/**
* 實體物件轉換為xml字串
* @param obj
* @param clazz
* @return
*/
public static String toXmlString(Object obj,Class clazz) {
String xmlString = "";
try {
JAXBContext context = JAXBContext.newInstance(clazz);
Marshaller marshaller = context.createMarshaller();
StringWriter writer=new StringWriter();
marshaller.marshal(obj,new StreamResult(writer));
xmlString=writer.toString();
} catch (JAXBException e) {
e.printStackTrace();
}
return xmlString;
}
}
上面的程式碼可以直接進行使用,下面我們編寫實際的測試程式碼
@Test
public void xmlTest(){
Faker faker=new Faker(new Locale("zh-CN"));
//建立實體物件
UserEntity user=new UserEntity();
user.setUserid(CommonUtil.getUuid());
user.setUsername("a001");
user.setRealname(faker.name().fullName());
//將實體物件轉換為xml字串
String xmlString= XmlUtil.toXmlString(user,UserEntity.class);
System.out.println(xmlString);
//建立檔案實體
FileEntity fileEntity=new FileEntity();
fileEntity.setFileid(user.getUsername());
fileEntity.setFileext("xml");
fileEntity.setFilename(user.getUsername());
fileEntity.setFiledata(xmlString.getBytes());
//將xml字串儲存到相應的xml檔案中
fileSystemStorageService.store(fileEntity);
try {
//測試從xml檔案中讀取xml字串
String fileContent=new String(Files.readAllBytes(fileSystemStorageService.load("a001.xml")));
System.out.println("read from file");
System.out.println(fileContent);
//將讀取到的xml字串轉化成實體
UserEntity usser1=(UserEntity) XmlUtil.toObject(fileContent,UserEntity.class);
System.out.println(usser1.getUsername());
System.out.println(usser1.getRealname());
} catch (IOException e) {
e.printStackTrace();
}
}
通過上面的程式碼就能基本完成實體物件與xml之間的互相轉換,詳細程式碼參見
spring
相關推薦
Java 中Xml與物件的互轉
在java開發中我們經常會遇到Xml與物件互相轉換的情況,尤其是針對WebService訪問時會涉及到xml與物件的轉換問題。目前可以用於xml與物件互轉的方式有很多這裡採用jdk自帶的JAXB來進行。 對於jaxb的介紹我就不用過多的介紹了,網上這方面的資料
Java中net.sf.json包關於JSON與物件互轉的坑
在Web開發過程中離不開資料的互動,這就需要規定互動資料的相關格式,以便資料在客戶端與伺服器之間進行傳遞。資料的格式通常有2種:1、xml;2、JSON。通常來說都是使用JSON來傳遞資料。本文正是介紹在Java中JSON與物件之間互相轉換時遇到的幾個問題以及相
JSONUtil(JAVA對象/List與json互轉,xml與json互轉)
transpose boolean ngs final span arraylist setname clas pro 1 package com.chauvet.utils.json; 2 3 import java.io.BufferedReader;
java 利用 ObjectMapper 進行jsonString與物件互轉
先在專案內引入包。 gradle: dependencies { compile( "com.fasterxml.jackson.core:jackson-datab
Jackson之String與物件互轉
public class JacksonTest { //配置ObjectMapper物件 private static final ObjectMapper objectMapper = new ObjectMapper() .configure(Dese
python中str與list互轉
1、list轉str 假設有一個名為test_list的list,轉換後的str名為test_str 則轉換方法: test_str = "".join(test_list) 需要注意的是該方法需要list中的元素為字元型,若是整型,則需要先轉換為字元型後再轉為str型別。
Jackson使用:String 與物件互轉、Jackson 從 json 字串轉換出物件
一、從json字串轉換出物件 Pager類: import com.fasterxml.jackson.annotation.JsonIgnoreProperties; @JsonIgnoreProperties(ignoreUnknown=true) public class Pager
Json工具類,使用正則支援xml與json互轉
1. xml轉json 具體就不多說了,我是採用的笨方法,多次使用正則進行替換的。比較好的一點兒是支援xml元素屬性。如果xml節點有屬性會使用 @attributes:{屬性列表} 進行格式化處理。如果有屬性只有一個值,那值要採用@value:"值"進行格式化。程式碼如下:
java base64字元與圖片互轉
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; &nbs
Python中rgb與ycbcr互轉
mat = np.array( [[ 65.481, 128.553, 24.966 ], [-37.797, -74.203, 112.0 ], [ 112.0, -9
Java中類與物件的關係與區別
什麼是類?類就是具備某些共同特徵的實體的集合,它是一種抽象的資料型別,它是對所具有相同特徵實體的抽象。在面向物件的程式設計語言中,類是對一類“事物”的屬性與行為的抽象。什麼是物件?物件就是一個真實世界中的實體,物件與實體是一一對應關係的,意思就是現實世界的每一個實體都是一個物
【java虛擬機器系列】java中類與物件的載入順序
首先了解一下Java虛擬機器初始化的原理。JVM通過加裝、連線和初始化一個Java型別,使該型別可以被正在執行的Java程式所使用。型別的生命週期如下圖所示: 裝載和連線必須在初始化之前就要完成。 類初始化階段,主要是為類變數賦予正確的初始值。這裡的“正確”初始值指的是程
xml與datatable互轉
DataTable轉Xml --dt為已獲得的DataTable StringBuilder xml = new StringBuilder(); XmlWriter writer = XmlWriter.Create(xml); XmlSerializer seriali
java實現ascii與中文互轉
package com.xingxd.study.test; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.Print
怎麼去理解JAVA中類與物件的關係
首先要明確,在現實生活中,每一個物體都有自己的基本特徵,專業一點也可以說成是屬性有些甚至還有一定的行為。例如 汽車的特徵:有車門、有輪胎、顏色各一等等,行為:有行駛,開車門,開車燈,等等。有這些屬性和行為的東西,我們就可以把它稱之為“汽車”。那麼在java語言中對現實生活中的
Java中文字串與unicode互轉工具類
原理利用了java實現js的escape以及unescape函式。 /** * 中文字串和unicode互轉工具類 <br> * * @author hkb <br> */ public class UnicodeConver
MFC中UTF8與GB2312互轉
UTF8轉GB2312 CString CMyBrowserDlg::ConvertUTF8toGB2312(CString str) { int len = str.GetLength
springMVC4(4)json與物件互轉例項解析請求響應資料轉換器
格式化資料輸入輸出 Spring3.0的重要介面:HttpMessageConveter為我們提供了強大的資料轉換功能,將我們的請求資料轉換為一個java物件,或將java物件轉化為特定格式輸出等。比如我們常見的從前端登錄檔單獲取json資料並轉化為User物
【Java】ASCII與字母互轉(程式碼整理)
ASCII(American Standard Code for Information Interchange,美國資訊交換標準程式碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言。 這是我轉換的程式碼工具類 package test; /**
Java中類與物件的概念區別
Java是一種面向物件的程式設計語言(Object Oriented Programming:OOP),面向物件的程式設計語言中有類和物件的概念,它們在概念上有什麼區別呢? 這往往是一個令面向物件的初學者感到迷惑的問題。 下面的解說雖然針對的是Java語