本文介绍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; }