XML和JSON互相转换原来这么简单

移动开发 Android
最近在折腾移动支付,什么移动支付、支付宝支付、银联支付、还有什么国外的 PayPal。有的支付系统还用着 XML 这种数据格式,和我们现在流行的 JSON 不太符合

[[347693]]

 1. 前言

最近在折腾移动支付,什么移动支付、支付宝支付、银联支付、还有什么国外的 PayPal。有的支付系统还用着 XML 这种数据格式,和我们现在流行的 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 格式化模块,已经自动加入了依赖池。

3. XML 与 Java 对象互转

XML 和 JSON 互相转换的流程都是先转换为 Java 对象,然后再转换为目标类型。

XmlMapper

XML 转对象需要定义一个XmlMapper,这个对应了转换 JSON 的ObjectMapper,甚至XmlMapper是ObjectMapper的子类。我们来声明一个XmlMapper,你可以new一个,如果你采用了默认的配置的话。

  1. XmlMapper xmlMapper = new XmlMapper(); 

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

  1. XmlMapper build = XmlMapper.builder() 
  2.                 //  忽略实体类没有对应属性    如果为 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 进行演示,先定义一个test.xml的 XML 文件,内容为

  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[]]>比转义字符要香的多,可读性更强。

对应的实体类为:

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

然后利用上面构造的builder来进行转换操作:

  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); 

既然能够转对象那么再转 JSON 也没啥难度了。

当然也支持注解的方式。

4. 总结

Jackson 类库是 Spring Boot 默认集成的 JSON 库,甚至不单单是 JSON 库,它还可以用来处理 XML。集成 XML 操作能力也非常简单,使用起来也不是很复杂。在我看来最大的优势是不用引入其它的额外框架来处理,依赖种类最少的系统开发维护起来是最省心的。

本文转载自微信公众号「码农小胖哥」,可以通过以下二维码关注。转载本文请联系码农小胖哥公众号。

 

责任编辑:武晓燕 来源: 码农小胖哥
相关推荐

2009-09-14 19:11:20

XML和Java Be

2021-04-19 05:42:51

Mmap文件系统

2023-11-01 14:49:07

2009-08-13 09:33:07

JavaBean到XM

2023-09-22 08:00:00

分布式锁Redis

2020-11-27 10:34:01

HTTPHTTPS模型

2020-09-24 06:44:54

HTTPS网站 HTTP

2009-06-23 14:22:00

DOM文档XML文件Java

2014-10-08 15:00:50

SUSE操作系统云计算

2019-03-15 10:55:12

通信系统手机

2016-03-21 11:09:52

Tableau/大数据

2014-11-25 15:02:01

客服系统

2010-08-02 13:55:20

2021-06-10 06:57:39

Redis存储数据库

2019-05-27 14:03:48

开发技能代码

2022-01-27 14:12:49

Python游戏脚本

2021-12-30 10:55:54

Python游戏脚本

2022-11-02 19:08:48

微服务轮询消费者

2015-11-24 09:53:22

AngularJSXMLJSON

2020-11-02 14:38:56

Java 深度学习模型
点赞
收藏

51CTO技术栈公众号