日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

顺丰下单后处理接收到的xml

發(fā)布時(shí)間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 顺丰下单后处理接收到的xml 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

xml字符串轉(zhuǎn)Java對(duì)象

開始接觸順豐下單,下單完成后返回的居然是xml,早聽說數(shù)據(jù)傳送的兩種格式j(luò)son和xml。首先看到xml一臉迷茫,不知道從哪下手,最后查閱了資料,成功的將xml字符串轉(zhuǎn)換成Java對(duì)象,不說那么多了,直接上代碼:

import java.io.Serializable; import java.util.List;import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlValue;import lombok.Data;/*** 順豐接口response對(duì)象*/@XmlAccessorType(XmlAccessType.FIELD)@XmlRootElement(name = "Response") @Data public class SfExpressResponse implements Serializable {private static final long serialVersionUID = 1L;//響應(yīng)狀態(tài)@XmlElement(name = "Head")private String Head;//響應(yīng)失敗原因@XmlElement(name = "ERROR")private ERROR ERROR;//響應(yīng)結(jié)果@XmlElement(name = "Body")private Body Body;@XmlAccessorType(XmlAccessType.NONE)@Datapublic static class ERROR {@XmlAttribute(name = "code")private String code;@XmlValueprivate String text;}@XmlAccessorType(XmlAccessType.NONE)@Datapublic static class Body {@XmlElement(name = "OrderResponse")private OrderResponse OrderResponse;@XmlElement(name = "RouteResponse")private RouteResponse RouteResponse;}@XmlRootElement(name="OrderResponse")@XmlAccessorType(XmlAccessType.NONE)@Datapublic static class OrderResponse {//訂單號(hào)@XmlAttribute(name = "orderid")private String orderId;//運(yùn)單號(hào)@XmlAttribute(name = "mailno")private String mailNo;//原寄地區(qū)域代碼(可用于順豐電子運(yùn)單標(biāo)簽打印)@XmlAttribute(name = "origincode")private String originCode;//目的地區(qū)域代碼(可用于順豐電子運(yùn)單標(biāo)簽打印)@XmlAttribute(name = "destcode")private String destCode;//篩單結(jié)果:1:人工確認(rèn) 2:可收派 3:不可以收派@XmlAttribute(name = "filter_result")private String filterResult;@XmlElement(name = "rls_info")private Rls_info rls_info;}@XmlRootElement(name="rls_info")@XmlAccessorType(XmlAccessType.NONE)@Datapublic static class Rls_info {@XmlAttribute(name = "invoke_result")private String invoke_result;@XmlElement(name = "rls_detail")private Rls_detail rls_detail;}@XmlRootElement(name="rls_detail")@XmlAccessorType(XmlAccessType.NONE)@Datapublic static class Rls_detail {@XmlAttribute(name = "sourceTransferCode")private String sourceTransferCode;@XmlAttribute(name = "sourceCityCode")private String sourceCityCode;@XmlAttribute(name = "sourceDeptCode")private String sourceDeptCode;@XmlAttribute(name = "sourceTeamCode")private String sourceTeamCode;@XmlAttribute(name = "destCityCode")private String destCityCode;@XmlAttribute(name = "destDeptCode")private String destDeptCode;@XmlAttribute(name = "destRouteLabel")private String destRouteLabel;@XmlAttribute(name = "cargoTypeCode")private String cargoTypeCode;@XmlAttribute(name = "limitTypeCode")private String limitTypeCode;@XmlAttribute(name = "expressTypeCode")private String expressTypeCode;@XmlAttribute(name = "twoDimensionCode")private String twoDimensionCode;@XmlAttribute(name = "proCode")private String proCode;}@XmlRootElement(name="RouteResponse")@XmlAccessorType(XmlAccessType.NONE)@Datapublic static class RouteResponse {//運(yùn)單號(hào)@XmlAttribute(name = "mailno")private String mailNo;//路由@XmlElement(name = "Route")private List<Route> Route ;}@XmlRootElement(name="Route")@XmlAccessorType(XmlAccessType.NONE)@Datapublic static class Route {//路由節(jié)點(diǎn)發(fā)生的時(shí)間@XmlAttribute(name = "accept_time")private String acceptTime;//路由節(jié)點(diǎn)具體描述@XmlAttribute(name = "remark")private String remark;//路由節(jié)點(diǎn)操作碼@XmlAttribute(name = "opcode")private String opcode;} }

上述,是完整的接收下單返回的xml字符串的值,若有缺失,可以仿照上邊的屬性進(jìn)行補(bǔ)充。
在請(qǐng)求順豐下單時(shí),需要將數(shù)據(jù)轉(zhuǎn)換成xml格式,我用的是在網(wǎng)上找的,如有遺漏請(qǐng)見諒:
工具類:

import java.io.ByteArrayInputStream; import java.io.File; import java.io.InputStream; import java.io.StringReader; import java.io.StringWriter; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map;import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller;import net.sf.json.JSONObject; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; /*** xml與json的轉(zhuǎn)換**/public class XmlUtil{/*** add by scy 通過JAXB生成XML字符串* @param clazz* @return*/public static String obj2XML(Object obj){StringWriter sw = new StringWriter(); String xml = null;try { // 利用jdk中自帶的轉(zhuǎn)換類實(shí)現(xiàn) JAXBContext context = JAXBContext.newInstance(obj.getClass()); Marshaller marshaller = context.createMarshaller(); // 格式化xml輸出的格式 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,Boolean.TRUE); marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.FALSE);marshaller.setProperty(Marshaller.JAXB_ENCODING, "gb2312");// 將對(duì)象轉(zhuǎn)換成輸出流形式的xml marshaller.marshal(obj, sw); xml = sw.toString();} catch (JAXBException e) { e.printStackTrace(); }return xml;}/*** add by scy 通過JAXB將XML轉(zhuǎn)化為Object* @param xml* @param clazz* @return*/public static <T> Object xml2Obj(String xml,Class<T> clazz){Object obj = null;try {JAXBContext jaxbContext = JAXBContext.newInstance(clazz);Unmarshaller um = jaxbContext.createUnmarshaller();StringReader sr = new StringReader(xml); obj = clazz.newInstance();obj = um.unmarshal(sr); } catch (JAXBException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}return obj; } }

獲取數(shù)據(jù)生成xml請(qǐng)求字符串:

import java.util.Map;import org.springframework.beans.factory.annotation.Value;import com.common.util.StringUtil;import lombok.Data;@Data//這個(gè)是引入的jar中的注解相當(dāng)于給屬性添加get/set方法 public class ShunFengUtil {@Value("${sf.clientCode}")private String clientCode; //商戶號(hào) (短的字母拼接的字符串)custid 是一串?dāng)?shù)字@Value("${sf.checkword}")private String checkword; //驗(yàn)證碼 (這個(gè)是一長(zhǎng)串字符)@Value("${sf.custid}")private String custid=""; //月付id 我這里使用的是寄付月結(jié)/*** 順豐下單接口* @param params* @return*/public static String getOrderServiceRequestXml(Map<String, String> params) {StringBuilder strBuilder = new StringBuilder();strBuilder.append("<Request service='OrderService' lang='zh-CN'>");strBuilder.append("<Head>" + StringUtil.getSystemPropertie("clientCode") + "</Head>");strBuilder.append("<Body>");strBuilder.append("<Order").append(" ");strBuilder.append("orderid='" + params.get("orderid") + "'").append(" ");//返回順豐運(yùn)單號(hào)strBuilder.append("express_type='1'").append(" ");//寄件方信息strBuilder.append("j_province='河南省'").append(" ");strBuilder.append("j_city='鄭州市'").append(" ");strBuilder.append("j_county='高新區(qū)'").append(" ");strBuilder.append("j_company='****業(yè)'").append(" ");strBuilder.append("j_contact='張三'").append(" ");strBuilder.append("j_tel='158******85'").append(" ");strBuilder.append("j_address='常春路'").append(" ");//收件方信息strBuilder.append("d_province='" + params.get("d_province") + "'").append(" ");strBuilder.append("d_city='" + params.get("d_city") + "'").append(" ");strBuilder.append("d_county='" + params.get("d_county") + "'").append(" ");strBuilder.append("d_company='" + params.get("d_company") + "'").append(" ");strBuilder.append("d_tel='" + params.get("d_tel") + "'").append(" ");strBuilder.append("d_contact='" + params.get("d_contact") + "'").append(" ");strBuilder.append("d_address='" + params.get("d_address") + "'").append(" ");//貨物信息strBuilder.append("express_type='1'").append(" ");strBuilder.append("pay_method='1'").append(" ");strBuilder.append("custid ='" + StringUtil.getSystemPropertie("custid") + "'").append(" ");strBuilder.append("parcel_quantity='1'").append(" ");strBuilder.append("is_docall='0'").append(" ");strBuilder.append("sendstarttime=''").append(" ");strBuilder.append("order_source='藥品'").append(">");strBuilder.append("<AddedService name='COD' value='1.01' value1='3712662207' />");strBuilder.append("</Order>");strBuilder.append("</Body>");strBuilder.append("</Request>");return strBuilder.toString();}/*** 獲取順豐訂單結(jié)果查詢接口xml* @param params* @return*/private String getOrderSearchServiceRequestXml(Map<String,String> params){String orderNo = params.get("orderNo");StringBuilder strBuilder = new StringBuilder();strBuilder.append("<Request service='OrderSearchService' lang='zh-CN'>");strBuilder.append("<Head>" + clientCode + "</Head>");strBuilder.append("<Body>");strBuilder.append("<OrderSearch").append(" ");strBuilder.append("orderid='" + orderNo.toString().trim() + "" + "'").append(" > ");strBuilder.append("</OrderSearch>");strBuilder.append("</Body>");strBuilder.append("</Request>");return strBuilder.toString();}/*** 獲取順豐物流查詢接口xml** @param params* @return*/public static String getRouteServiceRequestXml(Map<String, String> params) {StringBuilder strBuilder = new StringBuilder();strBuilder.append("<Request service='RouteService' lang='zh-CN'>");strBuilder.append("<Head>" + StringUtil.getSystemPropertie("clientCode") + "</Head>");strBuilder.append("<Body>");strBuilder.append("<RouteRequest").append(" ");strBuilder.append("tracking_type='1'").append(" ");strBuilder.append("method_type='1'").append(" ");strBuilder.append("tracking_number='" + params.get("mailno") + "'").append(" >");strBuilder.append("</RouteRequest>");strBuilder.append("</Body>");strBuilder.append("</Request>");return strBuilder.toString();}/*** 取消訂單** @param params* @return*/public static String getConfirmRequestXml(Map<String, String> params) {StringBuilder strBuilder = new StringBuilder();strBuilder.append("<Request service='OrderConfirmService' lang='zh-CN'>");strBuilder.append("<Head>").append(params.get("clientCode")).append("</Head>");strBuilder.append("<Body>");strBuilder.append("<OrderConfirm").append(" ");strBuilder.append("orderid='").append("orderNo").append("' ");strBuilder.append("dealtype='2'>").append(" ");strBuilder.append("</OrderConfirm>");strBuilder.append("</Body>");strBuilder.append("</Request>");return strBuilder.toString();}}

順豐的電子面單打印的話,官網(wǎng)上就有Java的demo

總結(jié)

以上是生活随笔為你收集整理的顺丰下单后处理接收到的xml的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 99国产精品视频免费观看一公开 | 日本黄色天堂 | 中文字幕第一页在线 | 久久亚洲综合国产精品99麻豆精品福利 | 日韩人妻精品在线 | 国产做爰xxxⅹ久久久精华液 | 极品白嫩丰满少妇无套 | 国产偷怕 | 看黄色的网址 | 伊人影院亚洲 | 欧美一级二级三级视频 | 欧美日韩成人免费 | 欧美日韩在线视频免费观看 | 精品国偷自产一区二区三区 | 国产成人三级一区二区在线观看一 | 一级黄色片免费看 | 日本东京热一区二区 | 综合久久国产 | 57pao国产精品一区 | 国产精品久久久久永久免费看 | 欧美日韩亚洲一区二区 | 亚洲欧美日韩国产 | 日韩av中文字幕在线免费观看 | 亚洲免费黄色网 | 成人日b视频 | 天天看片天天爽 | 国产人妖ts重口系列网站观看 | 2019狠狠干| 精品亚洲永久免费 | 人人舔 | www.99爱 | 龚玥菲三级露全乳视频 | 亚洲国产精品综合久久久 | 日本黄网在线观看 | 亚洲精品国产精品乱码不66 | 精品三级电影 | 天堂视频在线免费观看 | 成人婷婷 | 久久金品| 欧美脚交 | 国产亚洲精品aaaaaaa片 | 亚洲六月丁香色婷婷综合久久 | 福利一区二区在线观看 | 中文字幕+乱码+中文乱码www | 久久久视屏 | 精品爆乳一区二区三区 | 国产精品视频你懂的 | 国产乱码精品一区二区三 | 欧美极品在线观看 | 91久久精品一区二区 | 色综合av综合无码综合网站 | av网站大全免费 | 一级片在线免费观看视频 | av在线一区二区三区 | 超碰88| 欧美黄色一级生活片 | 成人99视频 | 99国内揄拍国内精品人妻免费 | 国产寡妇亲子伦一区二区三区四区 | 国产精选视频在线观看 | 老司机激情影院 | 99免费视频| japanese21ⅹxx日本| 亚洲AV无码成人国产精品色 | 91caob| 男女互插视频 | 激情五月婷婷久久 | 少女视频的播放方法 | 三级在线国产 | 黄色片久久久久 | 成人瑟瑟| 色综合99久久久无码国产精品 | 少妇与公做了夜伦理 | 亚洲美女中文字幕 | 夜色网| 久久av色| 在线观看免费观看 | 夜夜操夜夜干 | 国产v片 | 国产麻豆一级片 | 国产极品美女在线 | 黄频网站在线观看 | 欧美激情免费在线 | 翔田千里一区二区 | 欧美激情网站 | 在线一区二区三区视频 | 亚洲精品国产精品国自产网站按摩 | 在线你懂得 | 天堂在线v | 国产精品1234 | 国产亚洲精品美女久久久久 | 国产精品老牛影视 | 91高清在线免费观看 | 动漫av在线| 色欲一区二区三区精品a片 在线观看黄网站 | 777毛片 | 精品无码国产污污污免费网站 | 91精品国产91久久久久久吃药 | 国产精品久久久久久久久 |