java如何通过client客戶端http实现get/ post请求传递json参数到restful 服务接口

一、首先在client端,导入maven相关依赖(httpclient以及json相关依赖)


    
     org.apache.httpcomponents
     httpclient
     4.5.2
 
 
     net.sf.json-lib
     json-lib
     2.4
 
 
     net.sf.ezmorph
     ezmorph
     1.0.6
 
 
     commons-collections
     commons-collections
     3.2.1
 
 
     commons-beanutils
     commons-beanutils
     1.8.3
 
  

二、程序实例

import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;


import org.apache.http.Consts;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import net.sf.json.JSONObject;

public class HttpClientUtil {

    public static String doGet(String url, Map param) { 
      
        // 创建Httpclient对象 
        CloseableHttpClient httpclient = HttpClients.createDefault(); 
       //设置请求超时时间(各项超时参数具体含义链接)
       RequestConfig requestConfig = RequestConfig.custom()         
             .setConnectTimeout(10000)
             .setConnectionRequestTimeout(10000)

             .setSocketTimeout(10000)
             .build();

        String resultString = ""; 
        CloseableHttpResponse response = null; 
        try { 
            // 创建uri 
            URIBuilder builder = new URIBuilder(url); 
            if (param != null) { 
                for (String key : param.keySet()) { 
                    builder.addParameter(key, param.get(key)); 
                } 
            } 
            URI uri = builder.build(); 
            // 创建http GET请求 
            HttpGet httpGet = new HttpGet(uri); 

           //给这个请求设置请求配置
           httpGet.setConfig(requestConfig);
           httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2");
 
            // 执行请求 
            response = httpclient.execute(httpGet); 
            // 判断返回状态是否为200 
            if (response.getStatusLine().getStatusCode() == 200) { 
                resultString = EntityUtils.toString(response.getEntity(), "UTF-8"); 
            } 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } finally { 
            try { 
                if (response != null) { 
                    response.close(); 
                } 
                httpclient.close(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
        } 
        return resultString; 
    } 
   
 
    public static String doPost(String url, Map param) { 
        // 创建Httpclient对象 
        CloseableHttpClient httpClient = HttpClients.createDefault(); 

      //设置请求超时时间
      RequestConfig requestConfig = RequestConfig.custom()         
             .setConnectTimeout(10000)
             .setConnectionRequestTimeout(10000)

             .setSocketTimeout(10000)
             .build();

        CloseableHttpResponse response = null; 
        String resultString = ""; 
        try { 
            // 创建Http Post请求 
            HttpPost httpPost = new HttpPost(url); 
            httpPost.setConfig(requestConfig);
            // 创建参数列表 
            if (param != null) { 
                List paramList = new ArrayList<>(); 
                for (String key : param.keySet()) { 
                    paramList.add(new BasicNameValuePair(key, param.get(key))); 
                } 
                // 模拟表单 
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList); 
                httpPost.setEntity(entity); 
            } 
            // 执行http请求 
            response = httpClient.execute(httpPost); 

            if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
                resultString = EntityUtils.toString(response.getEntity(), "utf-8"); 
            }
        } catch (Exception e) { 
            e.printStackTrace(); 
        } finally { 
            try { 
                response.close(); 
            } catch (IOException e) { 
                // TODO Auto-generated catch block 
                e.printStackTrace(); 
            } 
        } 
 
        return resultString; 
    } 
     
    public static String doPostJson(String url, String json) { 
        // 创建Httpclient对象 
        CloseableHttpClient httpClient = HttpClients.createDefault(); 

       //设置请求超时时间
       RequestConfig requestConfig = RequestConfig.custom()         
             .setConnectTimeout(10000)
             .setConnectionRequestTimeout(10000)

             .setSocketTimeout(10000)
             .build();

        CloseableHttpResponse response = null; 
        String resultString = ""; 
        try { 
            // 创建Http Post请求 
            HttpPost httpPost = new HttpPost(url); 

            httpPost.setConfig(requestConfig);
            // 创建请求内容 ,发送json数据需要设置contentType
            StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON));
            httpPost.setEntity(entity); 
            // 执行http请求 
            response = httpClient.execute(httpPost); 
            if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
                resultString = EntityUtils.toString(response.getEntity(), "utf-8"); 
            }
        } catch (Exception e) { 
            e.printStackTrace(); 
        } finally { 
            try { 
                response.close(); 
            } catch (IOException e) { 
                // TODO Auto-generated catch block 
                e.printStackTrace(); 
            } 
        } 
 
        return resultString; 
    }  
}

 

补充:各项超时参数具体含义链接

 

1、发送普通格式数据:

客户端代码:

public static void httpClientTest(){
    String url="http://localhost/SSMActM/RestTest/restMethod";
    Map map=new HashMap ();
    map.put("name", "bob");
    map.put("id", "2");
    String str = HttpClientUtil.doGet(url, map);
    System.out.println(str);
}

服务端:

@RequestMapping(value = "/restMethod")
@ResponseBody
public String restMethod(HttpServletRequest request){
 String username = request.getParameter("name");
 return username;
}

2、发送json格式数据:

客户端代码:

public static void httpClientJsonTest(){


    String url="http://localhost/SSMActM/RestTest/restMethod";
    Map map=new HashMap ();
    map.put("name", "bob");
    map.put("id", "2");
    //post使用json格式
    String param=JSONObject.fromObject(map).toString();
    String str = HttpClientUtil.doPostJson(url,param);
    System.out.println(str);
}

服务端:

@RequestMapping(value = "/restMethod")
public String restMethod(HttpServletRequest request){
    StringBuffer str = new StringBuffer();  
    try { 
         BufferedInputStream in = new BufferedInputStream(request.getInputStream()); 
         int i; 
         char c; 
         while ((i=in.read())!=-1) { 
              c=(char)i; 
              str.append(c); 
          } 
      }catch (Exception ex) { 
           ex.printStackTrace(); 
      } 
      String string = str.toString();
      return string;
}

 

你可能感兴趣的:(Restful)