java關於對象(javabean)與xml之間的相互轉換__java

來源:互聯網
上載者:User

今天我們要探討的一個問題是,如何將xml格式的字串轉換成對象,以及對象轉換成xml字串。 簡介

現如今,雖然資料的傳輸大部分都是用json格式來進行傳輸,但是xml畢竟也會有一些老的項目在進行使用,身為一個萬能的程式員。我們又怎能不會使用它呢。正常的老式方法是通過擷取節點來進行一系列操作,個人感覺太過於複雜、繁瑣。今天推薦一套簡單的api。XStream類。好了廢話不多說,直接上代碼。(為了講述的更加清晰。我們全程不使用任何註解,只調用api來達到效果。在理解了原理的情況下看下註解的文法即會使用) 對象轉xml

首先我們從簡單的對象轉xml為例來進行講解,因為xml轉對象會相對複雜,我們由淺到深。 第一步:匯入jar包,本人項目以gradle搭建。jar包下載引用如下(普通項目從網上找一下jar包放到lib檔案夾下即可)

compile(“com.thoughtworks.xstream:xstream:1.4.10”) 第二步:建立對象(建立User與Customer,不要被名字誤導。。。沒什麼關係)

1.建立User對象(使用lombok建立getset方法,不瞭解的同學直接手動建立即可)

package com.kingboy.springboot.domain.dto;import lombok.Data;import java.util.List;/** * Created by beyondLi on 2017/6/14. */@Datapublic class User {    private String name;    private Integer age;    private List<Customer> customer;}

2.建立Customer對象(同上)

package com.kingboy.springboot.domain.dto;import lombok.Data;/** * Created by beyondLi on 2017/6/14. */@Datapublic class Customer {    private String commodity;}
第三步:測試類別
        //建立user對象與customer對象並賦值        User user = new User();        Customer customer1 = new Customer();        Customer customer2 = new Customer();        customer1.setCommodity("商品1");        customer2.setCommodity("商品2");        List<Customer> list = new ArrayList<>();        list.add(customer1);        list.add(customer2);        user.setName("beyondLi");        user.setAge(23);        user.setCustomer(list);        //建立xStream對象        XStream xStream = new XStream();        //調用toXML 將對象轉成字串        String s = xStream.toXML(user);        System.out.println(s);
第四步:輸出結果

第五步:最佳化

上述我們看到了結果,但是貌似和我們想要的不太一樣呀,怎麼有些是全路徑名稱呢。這裡解決方案很簡單。主要講思路。因為關係到xml轉對象時候封裝是否報錯的問題。預設情況下當對象沒有名字的時候,例如最一開始的對象 以及對象中的集合類型中泛型的類型,這些我們都沒辦法給他起名字的,預設情況下它是全路徑名稱。所以如果我們不處理,當xml轉對象的時候傳來的xml直接都是名字,而我們如果直接調用api封裝就會出現因為名字不一致所以封裝失敗而報錯的問題。所以我們要給全路徑名稱的類起別名(注。最好不要無腦性的給所有對象都起別名,雖然也可以解決問題。但是我們最好理解透徹,只給有需要的類起別名),代碼如下

        //建立user對象與customer對象並賦值        User user = new User();        Customer customer1 = new Customer();        Customer customer2 = new Customer();        customer1.setCommodity("商品1");        customer2.setCommodity("商品2");        List<Customer> list = new ArrayList<>();        list.add(customer1);        list.add(customer2);        user.setName("beyondLi");        user.setAge(23);        user.setCustomer(list);        //建立xStream對象        XStream xStream = new XStream();        //給指定類起別名        xStream.alias("User",User.class);        xStream.alias("Customer",Customer.class);        //調用toXML 將對象轉成字串        String s = xStream.toXML(user);        System.out.println(s);

結果:

希望閱讀到這裡的同學將上面那個起別名理解清楚,什麼時候起別名,什麼時候不需要起別名,這樣才能在xml轉對象的時候不出現任何的偏差和錯誤。 XML轉對象 第一步:匯入jar包。同上 第二步:建立User與Customer對象。同上 第三部 : 測試類別

首先我們展示一下上面提示的不起別名報錯問題,我類比了一個xml類型的字串,但是不起別名

        //類比一個xml格式字串        String xml = "<user>\n" +                "  <name>beyondLi</name>\n" +                "  <age>23</age>\n" +                "  <customer>\n" +                "    <Customer>\n" +                "      <commodity>商品1</commodity>\n" +                "    </Customer>\n" +                "    <Customer>\n" +                "      <commodity>商品2</commodity>\n" +                "    </Customer>\n" +                "  </customer>\n" +                "</user>";        //建立xStream對象        XStream xstream = new XStream();        //起別名,先不寫,讓其報錯        User user2 = (User) xstream.fromXML(xml);        System.out.println(user2);

結果

和明顯,雖然我們對象user和customer起名字都沒有錯誤。但是報錯說找不到。這個報錯結合上面的對象轉xml的結果。我們就可以明顯的看出問題出在了哪裡。

正確代碼如下

        //類比一個xml格式字串        String xml = "<user>\n" +                "  <name>beyondLi</name>\n" +                "  <age>23</age>\n" +                "  <customer>\n" +                "    <Customer>\n" +                "      <commodity>商品1</commodity>\n" +                "    </Customer>\n" +                "    <Customer>\n" +                "      <commodity>商品2</commodity>\n" +                "    </Customer>\n" +                "  </customer>\n" +                "</user>";        //建立xStream對象        XStream xstream = new XStream();        //將別名與xml名字相對應        xstream.alias("user", User.class);        xstream.alias("Customer", Customer.class);        User user2 = (User) xstream.fromXML(xml);        System.out.println(user2);

結果:

轉換成功

其實xml與對象之間的相互轉換並沒有難度,但是經常出錯和不成功其實就是因為在別名上的問題。而導致無法匹配。希望這篇文當可以協助更多的同學解決問題。

以上觀點僅是個人理解。如有錯誤或不完善,還望指出,共同成長

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.