下訂單接口,提交的數據如下:
<Request service = "OrderService" lang = "zh-CN" >
<Head>SLKJ2019</Head>
<Body>
<Order
orderid="SFKD-20160219000019"
j_company="深圳寶龍達信息技術股份有限公司"
j_contact="鄧麗君"
j_tel="15323233432"
j_mobile="15322234342"
j_province="廣東省"
j_city="深圳市"
j_county="南山區"
j_address="廣東省深圳市南山區西麗鎮塘朗同富裕工業城7棟"
d_contact="四海" d_tel="15023434543"
d_mobile="15423456545"
d_province="廣東省"
d_city="深圳市"
d_county="南山區"
d_address="科技園軟件產業基地"
express_type="1"
pay_method="1"
custid="7551234567"
parcel_quantity="1"
is_docall="0"
sendstarttime=""
remark="電子產品 筆記本+顯卡"
is_unified_waybill_no="1">
</Order>
</Body>
</Request>
下單表單頁面類似下圖:
下單表單
接收到表單數據,需要轉換成對應的xml數據提交,所以我們會根據xml結構構建對應的類,參考如下:
首先是最頂層的Request,主要看注解:
@XmlRootElement(name="Request")
public class SfRequest {
private String service;
private String lang = "zh-CN";
private String head = SfUtils.clientCode;
private SfRequestBody body;
public SfRequest() {}
public SfRequest(String service) {
this.service = service;
}
@XmlAttribute
public String getService() {
return service;
}
public void setService(String service) {
this.service = service;
}
@XmlAttribute
public String getLang() {
return lang;
}
public void setLang(String lang) {
this.lang = lang;
}
@XmlElement(name="Head")
public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
@XmlElement(name="Body")
public SfRequestBody getBody() {
return body;
}
public void setBody(SfRequestBody body) {
this.body = body;
}
}
然后是Body:
@XmlRootElement(name="Body")
public class SfRequestBody {
SfRequestOrder order;
public SfRequestBody() {}
@XmlElement(name = "Order")
public SfRequestOrder getOrder() {
return order;
}
public void setOrder(SfRequestOrder order) {
this.order = order;
}
}
然后就是Order,屬性太多就不逐個列了,需要注意的是XmlAttribute和XmlElement的區別,對比xml一下就知道了:
@XmlRootElement(name="Order")
public class SfRequestOrder {
……
private SfRequestCargo cargo;
public SfRequestOrder() {}
@XmlAttribute(name="j_province")
public String getJ_province() {
return j_province;
}
public void setJ_province(String j_province) {
this.j_province = j_province;
}
@XmlElement(name="Cargo")
public SfRequestCargo getCargo() {
return cargo;
}
public void setCargo(SfRequestCargo cargo) {
this.cargo = cargo;
}
}
下面的就不再一一列了,這些類文件都寫好之后,就可以將表單數據整合成請求的數據了,再通過上一篇的工具轉成xml數據,以及使用上一篇的testRequest方法,稍微修改下,下單提交就完成了。
響應數據收到后,我們可以根據xml的數據結構,如上建立對應的類文件,將xml反轉成類數據:
SfResponseVo responseVo = (SfResponseVo) SfUtils.xmlToBean(response, SfResponseVo.class);
那么下單的接口就完成了,是不是很簡單?這種方式在寫前面那些類文件時感覺比較繁瑣,但是寫完后,后面處理邏輯就非常清晰了。