前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >XML和JSON互相转换原来这么简单

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

作者头像
码农小胖哥
发布2020-10-30 11:12:16
3.8K0
发布2020-10-30 11:12:16
举报
文章被收录于专栏:码农小胖哥的码农生涯

1. 前言

最近在折腾移动支付,什么移动支付、支付宝支付、银联支付、还有什么国外的 PayPal。有的支付系统还用着 XML 这种数据格式,和我们现在流行的 JSON 不太符合。最开始我使用了DOM4J这个老牌 XML 解析库。写完 DEMO 后有人告诉我 Jackson 更加简单些,我尝试了一下确实更加方便简单,所以就来分享给大家。

2. 依赖

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

代码语言:javascript
复制
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
</dependency>

这个是 jackson 的的 XML 格式化模块,已经自动加入了依赖池。

3. XML 与 Java 对象互转

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

XmlMapper

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

代码语言:javascript
复制
XmlMapper xmlMapper = new XmlMapper();

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

代码语言:javascript
复制
  XmlMapper build = XmlMapper.builder()
                 //  忽略实体类没有对应属性    如果为 true 会抛出异常
                .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false)
                // 忽略null
                .serializationInclusion(JsonInclude.Include.NON_NULL)
                // 属性使用 驼峰首字母小写
                .propertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE)
                .build();

演示

接下来我们来用一个 DEMO 进行演示,先定义一个test.xml的 XML 文件,内容为

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" ?>
<User>
    <username>felord.cn</username>
    <age>18</age>
    <created><![CDATA[<2020-10-22>]]></created>
</User>

<![CDATA[]]>比转义字符要香的多,可读性更强。

对应的实体类为:

代码语言:javascript
复制
@Data
public class User {
 private String username;
 private Integer age;
 // private String created;
}

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

代码语言:javascript
复制
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>&lt;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);

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

当然也支持注解的方式。

4. 总结

Jackson 类库是 Spring Boot 默认集成的 JSON 库,甚至不单单是 JSON 库,它还可以用来处理 XML。集成 XML 操作能力也非常简单,使用起来也不是很复杂。在我看来最大的优势是不用引入其它的额外框架来处理,依赖种类最少的系统开发维护起来是最省心的。好了今天的分享就到这里,我是:码农小胖哥。多多关注哦!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农小胖哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 前言
  • 2. 依赖
  • 3. XML 与 Java 对象互转
    • XmlMapper
      • 演示
      • 4. 总结
      相关产品与服务
      云支付
      云支付(Cloud Pay,CPay)为您提供开放、可靠的聚合收款技术服务和商户管理功能。云支付支持刷卡支付、扫码支付、一码多付多种支付方式。服务商也可使用云支付提供的 SDK 和 HTTPS 接口,将云支付集成进自己的系统中,为商户提供的个性化解决方案。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档