1. 前言
最近在折腾移动支付,什么移动支付、支付宝支付、银联支付、还有什么国外的 PayPal。有的支付系统还用着 XML 这种数据格式,和我们现在流行的 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 格式化模块,已经自动加入了依赖池。
3. XML 与 Java 对象互转
XML 和 JSON 互相转换的流程都是先转换为 Java 对象,然后再转换为目标类型。
XmlMapper
XML 转对象需要定义一个XmlMapper,这个对应了转换 JSON 的ObjectMapper,甚至XmlMapper是ObjectMapper的子类。我们来声明一个XmlMapper,你可以new一个,如果你采用了默认的配置的话。
- XmlMapper xmlMapper = new XmlMapper();
如果你需要定制推荐使用建造者的方式,比如下面:
- 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 文件,内容为
- <?xml version="1.0" encoding="UTF-8" ?>
- <User>
- <username>felord.cn</username>
- <age>18</age>
- <created><![CDATA[<2020-10-22>]]></created>
- </User>
<![CDATA[]]>比转义字符要香的多,可读性更强。
对应的实体类为:
- @Data
- public class User {
- private String username;
- private Integer age;
- // private String created;
- }
然后利用上面构造的builder来进行转换操作:
- 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);
既然能够转对象那么再转 JSON 也没啥难度了。
当然也支持注解的方式。
4. 总结
Jackson 类库是 Spring Boot 默认集成的 JSON 库,甚至不单单是 JSON 库,它还可以用来处理 XML。集成 XML 操作能力也非常简单,使用起来也不是很复杂。在我看来最大的优势是不用引入其它的额外框架来处理,依赖种类最少的系统开发维护起来是最省心的。
本文转载自微信公众号「码农小胖哥」,可以通过以下二维码关注。转载本文请联系码农小胖哥公众号。