XML和JSON互相轉(zhuǎn)換原來這么簡單
1. 前言
最近在折騰移動支付,什么移動支付、支付寶支付、銀聯(lián)支付、還有什么國外的 PayPal。有的支付系統(tǒng)還用著 XML 這種數(shù)據(jù)格式,和我們現(xiàn)在流行的 JSON 不太符合。最開始我使用了DOM4J這個老牌 XML 解析庫。寫完 DEMO 后有人告訴我 Jackson 更加簡單些,我嘗試了一下確實更加方便簡單,所以就來分享給大家。
2. 依賴
在Spring Boot或者Spring Cloud的 Web 項目中只需要引入:
- <dependency>
- <groupId>com.fasterxml.jackson.dataformat</groupId>
- <artifactId>jackson-dataformat-xml</artifactId>
- </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)的配置的話。
- XmlMapper xmlMapper = new XmlMapper();
如果你需要定制推薦使用建造者的方式,比如下面:
- XmlMapper build = XmlMapper.builder()
- // 忽略實體類沒有對應(yīng)屬性 如果為 true 會拋出異常
- .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false)
- // 忽略null
- .serializationInclusion(JsonInclude.Include.NON_NULL)
- // 屬性使用 駝峰首字母小寫
- .propertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE)
- .build();
演示
接下來我們來用一個 DEMO 進(jìn)行演示,先定義一個test.xml的 XML 文件,內(nèi)容為
- <?xml version="1.0" encoding="UTF-8" ?>
- <User>
- <username>felord.cn</username>
- <age>18</age>
- <created><![CDATA[<2020-10-22>]]></created>
- </User>
<![CDATA[]]>比轉(zhuǎn)義字符要香的多,可讀性更強(qiáng)。
對應(yīng)的實體類為:
- @Data
- public class User {
- private String username;
- private Integer age;
- // private String created;
- }
然后利用上面構(gòu)造的builder來進(jìn)行轉(zhuǎn)換操作:
- ClassPathResource classPathResource = new ClassPathResource("./test.xml");
- User user = build.readValue(classPathResource.getFile(), User.class);
- // Java User(username=felord.cn, age=18, created=<2020-10-22>)
- System.out.println("xml file to Java Object " + user);
- String s = build.writeValueAsString(user);
- // <User><username>felord.cn</username><age>18</age><created><2020-10-22></created></User>
- System.out.println("Java Object to xml string " + s);
- User u = build.readValue(s, User.class);
- // Java User(username=felord.cn, age=18, created=<2020-10-22>)
- 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)小胖哥公眾號。