HttpClient通过Post方式发送Json数据

Posted OkidoGreen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpClient通过Post方式发送Json数据相关的知识,希望对你有一定的参考价值。

服务器用的是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;  
      
  

 

以上是关于HttpClient通过Post方式发送Json数据的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 HttpClient 在 POST 请求中将 JSON 数据作为正文发送

使用 HttpClient 和 C# 在 post 请求中发送 json

httpclient能通过get类型请求发送json数据吗?

使用 HttpClient 向本地 json 文件发送 POST 请求

HttpClient模拟get,post请求并发送请求参数(json等)

httpclient工具类,post请求发送json字符串参数,中文乱码处理