利用JAXB實現xml和bean之間的轉換(一)
阿新 • • 發佈:2019-02-09
JAXB能夠使用Jackson對JAXB註解的支援實現(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,這樣一來可以更好的標誌可以轉換為JSON物件的JAVA類。
JDK中JAXB相關的重要Class和Interface:
JAXBContext類,是應用的入口,用於管理XML/Java繫結資訊。
Marshaller介面,將Java物件序列化為XML資料。
Unmarshaller介面,將XML資料反序列化為Java物件。
JDK中JAXB相關的重要Annotation:
一般用到的就幾個:
@XmlRootElement:表示對映到根目錄標籤元素
@XmlElement:表示對映到子元素
@XmlAttribute:表示對映到屬性
@XmlElementWrapper
:表示型別是集合元素的子元素的上層目錄
要把實現相互轉換,首先你得根據目錄結構設計類物件
比如xml中有一下目錄:
<A> <B></B> <C c=".."></C> <D> <E e="..."> <F></F> <G> <H></H> </G> <G> <H></H> <M></M> </G> <G> <H></H> <M></M> </G> <G> <H></H> <M></M> </G> </E> </D> </A>
那麼Java Bean 有ClassA、ClaccC、ClassD、ClassE、ClassG5個類
對於JAXB相關的重要Annotation的宣告,如@Xml.....,可以放在成員變數的setter()或getter()方法上,兩者中任選其一即可,但決不能放在成員變數上,否則執行將丟擲異常com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException。
ClassA
@XmlRootElement(name = "A") Class ClassA{ private Object b; private C c; private D d; @XmlElement(name = "B") getB(); setB(); @XmlElement(name = "C") getC(); setC(); @XmlElement(name = "D") getD(); setD(); }
ClassC
@XmlRootElement(name = "C")
Class ClassC{
private Object c;
@XmlAttribute(name = "c")
getC();
setC();
}
ClassD
@@XmlRootElement(name = "D")
Class ClassD{
private E e;
@XmlElement(name = "E")
getE();
setE();
}
ClassE
@@XmlRootElement(name = "E")
Class ClassE{
private Object e;
private Object f;
private G g;
@XmlAttribute(name = "e")
getE();
setE();
@XmlElement(name = "F")
getF();
setF();
@XmlElement(name = "G")
getG();
setG();
}
ClassG
@XmlRootElement(name = "G")
Class ClassG{
private Object h;
private Object m;
@XmlAttribute(name = "H")
getH();
setH();
@XmlAttribute(name = "M")
getM();
setM();
}
下面介紹如何將xml檔案轉換為Bean
public static void main(String[] args) {
//xml轉換成bean
try {
File file = new File("C:\\file1.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(A.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
A a = (A) jaxbUnmarshaller.unmarshal(file);
System.out.println(fox.toString());
} catch (JAXBException e) {
e.printStackTrace();
}
}
如果xml檔案中有中文,記得把編碼方式從UTF-8變為GBK
將bean轉換為xml
這個之後再來說