2017-08-26 2021-04-07 JAVA 10 分钟读完 (大约1490个字) XML 可以说是一种被时代淘汰的数据传输格式,毕竟相比较 JSON,其语法,表现形式,以及第三方类库的支持,都要略逊一筹,但最近在对接一些老接口时,主要还是以 XML 为主,而翻阅相关的文档以及博客,没看到很好的文章介绍如何使用 xml 进行数据传输,所以简单写下此文,做一下记录。内心多多少少还是会抵制对接如此老旧的接口,不过生活还是要继续。
Code First 先上一段代码,展示一下如何封装,讲解放到后面
一个典型的对接方提供的 XML 如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ORDER > <ORDER_NO > 10086</ORDER_NO > <TOTAL_PRICE > 3.14</TOTAL_PRICE > <CREATE_TIME > 2017-08-26 03:39:30</CREATE_TIME > <ORDER_ITEMS > <ORDER_ITEM > <GOODS_NAME > 德芙 </GOODS_NAME > <NUM > 3</NUM > </ORDER_ITEM > <ORDER_ITEM > <GOODS_NAME > 旺仔 </GOODS_NAME > <NUM > 10</NUM > </ORDER_ITEM > </ORDER_ITEMS > </ORDER >
而我们要对应的实体类,则应当如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 @XmlRootElement(name = "ORDER") @XmlAccessorType(XmlAccessType.FIELD) public class Order { @XmlElement(name = "ORDER_NO") private String orderNo; @XmlElement(name = "TOTAL_PRICE") private BigDecimal totalPrice; @XmlElement(name = "CREATE_TIME") @XmlJavaTypeAdapter(DateAdapter.class) private Date createTime; @XmlElementWrapper(name = "ORDER_ITEMS") @XmlElement(name = "ORDER_ITEM") private List<OrderItem> orderItems; }
1 2 3 4 5 6 7 8 9 10 @XmlAccessorType(XmlAccessType.FIELD) public class OrderItem { @XmlElement(name = "GOODS_NAME") private String goodsName; @XmlElement(name = "NUM") private Integer num; }
我举的这个示例基本包含一般情况下所有可能出现的需求
<1> 常用注解 XmlRootElement,XmlAccessorType,XmlElement
<2> 日期转换的适配器注解
<3> 如何在 XML 中设置集合
在介绍这三点之前,先给出转换的工具类