這篇文章給大家分享的是有關(guān)通過JAXB實現(xiàn)XML和對象之間映射的方法的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。
創(chuàng)新互聯(lián)公司服務項目包括樅陽網(wǎng)站建設、樅陽網(wǎng)站制作、樅陽網(wǎng)頁制作以及樅陽網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,樅陽網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務的客戶以成都為中心已經(jīng)輻射到樅陽省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!JAXB的全稱是Java Architecture for XML Binding,是一項可以通過XML產(chǎn)生Java對象,也可以通過Java對象產(chǎn)生XML的技術(shù)。JDK中關(guān)于JAXB部分有幾個比較重要的接口或類,如:
? JAXBContext:它是程序的入口類,提供了XML/Java綁定的操作,包括marshal、unmarshal等。
? Marshaller:它負責把Java對象序列化為對應的XML。
? Unmarshaller:它負責把XML反序列化為對應的Java對象。
序列化
進行序列化的基本操作步驟如下:
//1、獲取一個基于某個class的JAXBContext,即JAXB上下文 JAXBContext jaxbContext = JAXBContext.newInstance(obj.getClass()); //2、利用JAXBContext對象創(chuàng)建對象的Marshaller實例。 Marshaller marshaller = jaxbContext.createMarshaller(); //3、設置一些序列化時需要的指定的配置 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE); StringWriter writer = new StringWriter(); //4、將對象進行序列化 marshaller.marshal(obj, writer);
1、 創(chuàng)建一個JAXB上下文對象。
2、 利用JAXB上下文對象創(chuàng)建對應的Marshaller對象。
3、 指定序列化時的配置參數(shù),具體可以設置的參數(shù)和對應的參數(shù)的含義可以參考API文檔。
4、 最后一步是將對應的對象序列化到一個Writer、OutputStream、File等輸出對象中,具體可以參考Marshaller接口的API文檔。
使用JAXB進行對象的序列化時對應的對象類型必須是javax.xml.bind.JAXBElement類型,或者是使用了javax.xml.bind.annotation.XmlRootElement注解標注的類型。XmlRootElement用于標注在class上面,表示把一個class映射為一個XML Element對象。與之相配合使用的注解通常還有XmlElement和XmlAttribute。XmlElement注解用于標注在class的屬性上,用于把一個class的屬性映射為一個XML Element對象。XmlAttribute注解用于標注在class的屬性上,用于把一個class的屬性映射為其class對應的XML Element上的一個屬性。默認情況下,當我們的一個屬性沒有使用XmlElement標注時也會被序列化為Xml元素的一個子元素,如果我們不希望Java對象中的某個屬性被序列化則可以在對應的屬性或?qū)膅et方法上采用XMLTransient進行標注。
示例
Person類
@XmlRootElement public class Person { private Integer id; private String name; private Integer age; private Address address; @XmlAttribute(name = "id") public Integer getId() { returnid; } public void setId(Integer id) { this.id = id; } @XmlAttribute public String getName() { returnname; } public void setName(String name) { this.name = name; } @XmlElement public Integer getAge() { returnage; } public void setAge(Integer age) { this.age = age; } @XmlElement public Address getAddress() { returnaddress; } public void setAddress(Address address) { this.address = address; } }
Address類
@XmlRootElement public class Address { private Integer id; private String province; private String city; private String area; private String other; @XmlAttribute(name="id") public Integer getId() { returnid; } public void setId(Integer id) { this.id = id; } @XmlElement public String getProvince() { returnprovince; } public void setProvince(String province) { this.province = province; } @XmlElement public String getCity() { returncity; } public void setCity(String city) { this.city = city; } @XmlElement public String getArea() { returnarea; } public void setArea(String area) { this.area = area; } @XmlElement public String getOther() { returnother; } public void setOther(String other) { this.other = other; } }
測試方法
@Test public void testMarshal() throws JAXBException { JAXBContext context = JAXBContext.newInstance(Person.class); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); StringWriter writer = new StringWriter(); Person person = new Person(); person.setId(1); person.setName("張三"); person.setAge(30); Address address = new Address(); address.setId(1); address.setProvince("廣東省"); address.setCity("深圳市"); address.setArea("南山區(qū)"); address.setOther("其它"); person.setAddress(address); marshaller.marshal(person, writer); System.out.println(writer.toString()); }
輸出結(jié)果
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <person id="1" name="張三"> <address id="1"> <area>南山區(qū)</area> <city>深圳市</city> <other>其它</other> <province>廣東省</province> </address> <age>30</age> </person>
反序列化
進行反序列化的基本步驟如下:
//1、創(chuàng)建一個指定class的JAXB上下文對象 JAXBContext context = JAXBContext.newInstance(Person.class); //2、通過JAXBContext對象創(chuàng)建對應的Unmarshaller對象。 Unmarshaller unmarshaller = context.createUnmarshaller(); File file = new File("D:\\person.xml"); //3、調(diào)用Unmarshaller對象的unmarshal方法進行反序列化,接收的參數(shù)可以是一個InputStream、Reader、File等 Person person = (Person) unmarshaller.unmarshal(file);
Unmarshaller對象在提供了一系列的unmarshal重載方法,對應的參數(shù)類型可以是File、InputStream、Reader等,具體的可以查看對應的API文檔。
JAXB工具類
除了使用JAXBContext來創(chuàng)建Marshaller和Unmarshaller對象來實現(xiàn)Java對象和XML之間的互轉(zhuǎn)外,Java還為我們提供了一個工具類JAXB。JAXB工具類提供了一系列的靜態(tài)方法來簡化了Java對象和XML之間的互轉(zhuǎn),只需要簡單的一行代碼即可搞定。
@Test public void testMarshal1() { Person person = new Person(); person.setId(1); person.setName("張三"); person.setAge(30); Address address = new Address(); address.setId(1); address.setProvince("廣東省"); address.setCity("深圳市"); address.setArea("南山區(qū)"); address.setOther("其它"); person.setAddress(address); JAXB.marshal(person, System.out); } @Test public void testUnmarshal1() { File xml = new File("D:\\person.xml"); Person person = JAXB.unmarshal(xml, Person.class); System.out.println(person); }
感謝各位的閱讀!關(guān)于通過JAXB實現(xiàn)XML和對象之間映射的方法就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
文章題目:通過JAXB實現(xiàn)XML和對象之間映射的方法-創(chuàng)新互聯(lián)
本文URL:http://muchs.cn/article34/ceejse.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、網(wǎng)站導航、網(wǎng)站營銷、外貿(mào)建站、品牌網(wǎng)站制作、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容