2017-08-26   2025-06-30 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 中设置集合
在介绍这三点之前,先给出转换的工具类