HttpClient通過Post方式傳送Json資料
阿新 • • 發佈:2019-01-06
伺服器用的是Springmvc,介面內容:
@ResponseBody @RequestMapping(value="/order",method=RequestMethod.POST) public boolean order(HttpServletRequest request,@RequestBody List<Order> orders) throws Exception { AdmPost admPost = SessionUtil.getCurrentAdmPost(request); if(admPost == null){ throw new RuntimeException("[OrderController-saveOrUpdate()] 當前登陸的使用者職務資訊不能為空!"); } try { this.orderService.saveOrderList(orders,admPost); Loggers.log("訂單管理",admPost.getId(),"匯入",new Date(),"匯入訂單成功,訂單資訊--> " + GsonUtil.toString(orders, new TypeToken<List<Order>>() {}.getType())); return true; } catch (Exception e) { e.printStackTrace(); Loggers.log("訂單管理",admPost.getId(),"匯入",new Date(),"匯入訂單失敗,訂單資訊--> " + GsonUtil.toString(orders, new TypeToken<List<Order>>() {}.getType())); return false; } }
通過ajax訪問的時候,程式碼如下:
$.ajax({ type : "POST", contentType : "application/json; charset=utf-8", url : ctx + "order/saveOrUpdate", dataType : "json", anysc : false, data : {orders:[{orderId:"11",createTimeOrder:"2015-08-11"}]}, // Post 方式,data引數不能為空"",如果不傳引數,也要寫成"{}",否則contentType將不能附加在Request Headers中。 success : function(data){ if (data != undefined && $.parseJSON(data) == true){ $.messager.show({ title:'提示資訊', msg:'儲存成功!', timeout:5000, showType:'slide' }); }else{ $.messager.alert('提示資訊','儲存失敗!','error'); } }, error : function(XMLHttpRequest, textStatus, errorThrown) { alert(errorThrown + ':' + textStatus); // 錯誤處理 } });
通過HttpClient方式訪問,程式碼如下:
package com.ec.spring.test; import java.io.IOException; import java.nio.charset.Charset; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import com.google.gson.JsonArray; import com.google.gson.JsonObject; public class APIHttpClient { // 介面地址 private static String apiURL = "http://192.168.3.67:8080/lkgst_manager/order/order"; private Log logger = LogFactory.getLog(this.getClass()); private static final String pattern = "yyyy-MM-dd HH:mm:ss:SSS"; private HttpClient httpClient = null; private HttpPost method = null; private long startTime = 0L; private long endTime = 0L; private int status = 0; /** * 介面地址 * * @param url */ public APIHttpClient(String url) { if (url != null) { this.apiURL = url; } if (apiURL != null) { httpClient = new DefaultHttpClient(); method = new HttpPost(apiURL); } } /** * 呼叫 API * * @param parameters * @return */ public String post(String parameters) { String body = null; logger.info("parameters:" + parameters); if (method != null & parameters != null && !"".equals(parameters.trim())) { try { // 建立一個NameValuePair陣列,用於儲存欲傳送的引數 method.addHeader("Content-type","application/json; charset=utf-8"); method.setHeader("Accept", "application/json"); method.setEntity(new StringEntity(parameters, Charset.forName("UTF-8"))); startTime = System.currentTimeMillis(); HttpResponse response = httpClient.execute(method); endTime = System.currentTimeMillis(); int statusCode = response.getStatusLine().getStatusCode(); logger.info("statusCode:" + statusCode); logger.info("呼叫API 花費時間(單位:毫秒):" + (endTime - startTime)); if (statusCode != HttpStatus.SC_OK) { logger.error("Method failed:" + response.getStatusLine()); status = 1; } // Read the response body body = EntityUtils.toString(response.getEntity()); } catch (IOException e) { // 網路錯誤 status = 3; } finally { logger.info("呼叫介面狀態:" + status); } } return body; } public static void main(String[] args) { APIHttpClient ac = new APIHttpClient(apiURL); JsonArray arry = new JsonArray(); JsonObject j = new JsonObject(); j.addProperty("orderId", "中文"); j.addProperty("createTimeOrder", "2015-08-11"); arry.add(j); System.out.println(ac.post(arry.toString())); } /** * 0.成功 1.執行方法失敗 2.協議錯誤 3.網路錯誤 * * @return the status */ public int getStatus() { return status; } /** * @param status * the status to set */ public void setStatus(int status) { this.status = status; } /** * @return the startTime */ public long getStartTime() { return startTime; } /** * @return the endTime */ public long getEndTime() { return endTime; } }