当前位置:主页 > 查看内容

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

发布时间:2021-05-07 00:00| 位朋友查看

简介:1. 前言 最近在折腾移动支付,什么移动支付、支付宝支付、银联支付、还有什么国外的 PayPal。有的支付系统还用着 XML 这种数据格式,和我们现在流行的 JSON 不太符合。最开始我使用了DOM4J这个老牌 XML 解析库。写完 DEMO 后有人告诉我 Jackson 更加简单些,……

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 操作能力也非常简单,使用起来也不是很复杂。在我看来最大的优势是不用引入其它的额外框架来处理,依赖种类最少的系统开发维护起来是最省心的。

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


本文转载自网络,原文链接:https://mp.weixin.qq.com/s/y420XO9m0uE7wUH15Dj2ww
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
上一篇:微信7.0.20内测版推出,新增了这三项功能 下一篇:没有了

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐