自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

XML和JSON互相轉(zhuǎn)換原來這么簡單

移動開發(fā) Android
最近在折騰移動支付,什么移動支付、支付寶支付、銀聯(lián)支付、還有什么國外的 PayPal。有的支付系統(tǒng)還用著 XML 這種數(shù)據(jù)格式,和我們現(xiàn)在流行的 JSON 不太符合

[[347693]]

 1. 前言

最近在折騰移動支付,什么移動支付、支付寶支付、銀聯(lián)支付、還有什么國外的 PayPal。有的支付系統(tǒng)還用著 XML 這種數(shù)據(jù)格式,和我們現(xiàn)在流行的 JSON 不太符合。最開始我使用了DOM4J這個老牌 XML 解析庫。寫完 DEMO 后有人告訴我 Jackson 更加簡單些,我嘗試了一下確實更加方便簡單,所以就來分享給大家。

2. 依賴

在Spring Boot或者Spring Cloud的 Web 項目中只需要引入:

  1. <dependency> 
  2.     <groupId>com.fasterxml.jackson.dataformat</groupId> 
  3.     <artifactId>jackson-dataformat-xml</artifactId> 
  4. </dependency> 

這個是 jackson 的的 XML 格式化模塊,已經(jīng)自動加入了依賴池。

3. XML 與 Java 對象互轉(zhuǎn)

XML 和 JSON 互相轉(zhuǎn)換的流程都是先轉(zhuǎn)換為 Java 對象,然后再轉(zhuǎn)換為目標(biāo)類型。

XmlMapper

XML 轉(zhuǎn)對象需要定義一個XmlMapper,這個對應(yīng)了轉(zhuǎn)換 JSON 的ObjectMapper,甚至XmlMapper是ObjectMapper的子類。我們來聲明一個XmlMapper,你可以new一個,如果你采用了默認(rèn)的配置的話。

  1. XmlMapper xmlMapper = new XmlMapper(); 

如果你需要定制推薦使用建造者的方式,比如下面:

  1. XmlMapper build = XmlMapper.builder() 
  2.                 //  忽略實體類沒有對應(yīng)屬性    如果為 true 會拋出異常 
  3.                .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false
  4.                // 忽略null 
  5.                .serializationInclusion(JsonInclude.Include.NON_NULL) 
  6.                // 屬性使用 駝峰首字母小寫 
  7.                .propertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE) 
  8.                .build(); 

演示

接下來我們來用一個 DEMO 進(jìn)行演示,先定義一個test.xml的 XML 文件,內(nèi)容為

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <User
  3.     <username>felord.cn</username> 
  4.     <age>18</age> 
  5.     <created><![CDATA[<2020-10-22>]]></created> 
  6. </User

<![CDATA[]]>比轉(zhuǎn)義字符要香的多,可讀性更強(qiáng)。

對應(yīng)的實體類為:

  1. @Data 
  2. public class User { 
  3.  private String username; 
  4.  private Integer age; 
  5.  // private String created; 

然后利用上面構(gòu)造的builder來進(jìn)行轉(zhuǎn)換操作:

  1. ClassPathResource classPathResource = new ClassPathResource("./test.xml"); 
  2. User user = build.readValue(classPathResource.getFile(), User.class); 
  3. // Java  User(username=felord.cn, age=18, created=<2020-10-22>) 
  4. System.out.println("xml file to Java Object " + user); 
  5. String s = build.writeValueAsString(user); 
  6. // <User><username>felord.cn</username><age>18</age><created>&lt;2020-10-22></created></User
  7. System.out.println("Java Object to xml string " + s); 
  8. User u = build.readValue(s, User.class); 
  9. // Java User(username=felord.cn, age=18, created=<2020-10-22>) 
  10. System.out.println("xml string to Java Object" + u); 

既然能夠轉(zhuǎn)對象那么再轉(zhuǎn) JSON 也沒啥難度了。

當(dāng)然也支持注解的方式。

4. 總結(jié)

Jackson 類庫是 Spring Boot 默認(rèn)集成的 JSON 庫,甚至不單單是 JSON 庫,它還可以用來處理 XML。集成 XML 操作能力也非常簡單,使用起來也不是很復(fù)雜。在我看來最大的優(yōu)勢是不用引入其它的額外框架來處理,依賴種類最少的系統(tǒng)開發(fā)維護(hù)起來是最省心的。

本文轉(zhuǎn)載自微信公眾號「碼農(nóng)小胖哥」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系碼農(nóng)小胖哥公眾號。

 

責(zé)任編輯:武曉燕 來源: 碼農(nóng)小胖哥
相關(guān)推薦

2021-04-19 05:42:51

Mmap文件系統(tǒng)

2023-11-01 14:49:07

2009-09-14 19:11:20

XML和Java Be

2014-10-08 15:00:50

SUSE操作系統(tǒng)云計算

2019-03-15 10:55:12

通信系統(tǒng)手機(jī)

2020-09-24 06:44:54

HTTPS網(wǎng)站 HTTP

2023-09-22 08:00:00

分布式鎖Redis

2020-11-27 10:34:01

HTTPHTTPS模型

2009-08-13 09:33:07

JavaBean到XM

2009-06-23 14:22:00

DOM文檔XML文件Java

2014-11-25 15:02:01

客服系統(tǒng)

2016-03-21 11:09:52

Tableau/大數(shù)據(jù)

2010-08-02 13:55:20

2025-03-20 12:33:36

2021-12-30 10:55:54

Python游戲腳本

2022-01-27 14:12:49

Python游戲腳本

2019-05-27 14:03:48

開發(fā)技能代碼

2021-06-10 06:57:39

Redis存儲數(shù)據(jù)庫

2020-11-02 14:38:56

Java 深度學(xué)習(xí)模型

2020-09-25 07:49:36

策略模式Spring
點贊
收藏

51CTO技術(shù)棧公眾號