Java中Http请求restful接口POST、GET、PUT、DELETE等

时间:2025-03-10 13:56:49

本文介绍springboot中使用CloseableHttpClient类创建http连接

// 创建连接与设置连接参数
        CloseableHttpClient httpClient = ().build();

 直接上代码实现:

url为服务地址;map为请求参数;

后面有方法介绍

import ;
import .slf4j.Slf4j;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;

import ;
import ;
import ;
import ;
import ;

/**
 * @Auther: zhouzihan
 */
@Component
@Slf4j
public class HttpComponentsClient {
    static String resultData = null;

    /**
     * 调用服务端的POST请求
     * 服务端入参注解:     @RequestBody
     *
     * @param postUrl 设备服务请求地址
     * @param map     设备对象参数<k,v>
     * @throws Exception
     */
    public static String doPost(String postUrl, Map<String, Object> map) throws Exception {
        // 请求参数
        String json = (map);
        // 创建连接与设置连接参数
        CloseableHttpClient httpClient = ().build();
        HttpPost httpPost = new HttpPost(postUrl);
        StringEntity entity = new StringEntity(json);
        ("UTF-8");
        ("application/json");
        (entity);
        // 发起请求与接收返回值
        HttpResponse response = (httpPost);
        resultData = returnResult(response);
        ();
        return resultData;
    }

    /**
     * 调用服务端的GET请求
     * 服务端入参注解: @RequestParam
     *
     * @param getUrl 设备服务请求地址
     * @param map    (支持单个、多个参数拼接)
     *               key:参数名称
     *               value:参数值
     * @return resultData
     * @throws Exception
     */
    public static String doGetRequestParam(String getUrl, Map<String, Object> map) throws Exception {
        String obj = questionMarksTheParticipation(map);
        getUrl = getUrl + obj;
        // 创建连接与设置连接参数
        CloseableHttpClient httpClient = ().build();
        HttpGet httpGet = new HttpGet(getUrl);
        // 发起请求与接收返回值
        HttpResponse response = (httpGet);
        resultData = returnResult(response);
        ();
        return resultData;
    }

    /**
     * 调用服务端的GET请求
     * 服务端入参注解: @PathVariable
     */
    public static String doGetPathVariable(String getUrl, Object val) throws Exception {
        //入参有中文需要编码
        getUrl = getUrl + val;
        // 创建连接与设置连接参数
        CloseableHttpClient httpClient = ().build();
        HttpGet httpGet = new HttpGet(getUrl);
        // 发起请求与接收返回值
        HttpResponse response = (httpGet);
        resultData = returnResult(response);
        ();
        return resultData;
    }

    /**
     * 调用服务端的PUT请求
     *
     * @param map (支持单个、多个参数拼接)
     *            *          key:参数名称
     *            *          value:参数值
     */
    public static String doPut(String getUrl, Map<String, Object> map) throws Exception {
        //入参有中文需要编码
        String obj = questionMarksTheParticipation(map);
        getUrl = getUrl + obj;
        // 创建连接与设置连接参数
        CloseableHttpClient httpClient = ().build();
        HttpPut httpPut = new HttpPut(getUrl);
        // 发起请求与接收返回值
        HttpResponse response = (httpPut);
        resultData = returnResult(response);
        ();
        return resultData;
    }

    /**
     * 调用服务端的DELETE请求
     *
     * @param map (支持单个、多个参数拼接)
     *            *          key:参数名称
     *            *          value:参数值
     */
    public static String doDelete(String getUrl, Map<String, Object> map) throws Exception {
        //入参有中文需要编码
        String obj = questionMarksTheParticipation(map);
        getUrl = getUrl + obj;
        // 创建连接与设置连接参数
        CloseableHttpClient httpClient = ().build();
        HttpDelete httpDelete = new HttpDelete(getUrl);
        // 发起请求与接收返回值
        HttpResponse response = (httpDelete);
        resultData = returnResult(response);
        ();
        return resultData;
    }


    /**
     * questionMarksTheParticipation():问号传参
     *
     * @param map key、value拼接  key或value存在空值跳过拼接
     *            例:key=projectId
     *            value=1
     *            参数拼接结果:  ?projectId=1
     * @return obj
     */
    public static String questionMarksTheParticipation(Map<String, Object> map) throws UnsupportedEncodingException {
        StringBuilder obj = new StringBuilder();
        for (<String, Object> entry : ()) {
            if (null != () && null != ()) {
                if (!().isEmpty()) {
                    String s = () + "=" + ((()), "UTF-8");
                    (s).append("&");
                }
            }
        }
        obj = new StringBuilder("?" + (0, () - 1));
        return ();
    }

    public static String returnResult(HttpResponse response) throws IOException {
        if (().getStatusCode() != 200) {
            ("调用服务端异常.");
        }
        HttpEntity res = ();
        String resultData = (res);
        ("从服务端返回结果: " + resultData);
        return resultData;
    }
}

注意:所有的方法传递参数的方式都是Map<String,Object>,这样做不需要关注外面对象的具体属性、参数属性个数。

直接把参数put到map中,在上面类中最后的两个方法questionMarksTheParticipation()和returnResult()已经将GET、PUT和DELETE请求参数做拼接处理,拼接到请求URL中了

/**
     * questionMarksTheParticipation():问号传参
     *
     * @param map key、value拼接  key或value存在空值跳过拼接
     *            例:key=projectId
     *            value=1
     *            参数拼接结果:  ?projectId=1
     * @return obj
     */
    public static String questionMarksTheParticipation(Map<String, Object> map) throws UnsupportedEncodingException {
        StringBuilder obj = new StringBuilder();
        for (<String, Object> entry : ()) {
            if (null != () && null != ()) {
                if (!().isEmpty()) {
                    String s = () + "=" + ((()), "UTF-8");
                    (s).append("&");
                }
            }
        }
        obj = new StringBuilder("?" + (0, () - 1));
        return ();
    }

    public static String returnResult(HttpResponse response) throws IOException {
        if (().getStatusCode() != 200) {
            ("调用服务端异常.");
        }
        HttpEntity res = ();
        String resultData = (res);
        ("从服务端返回结果: " + resultData);
        return resultData;
    }