public class MyHttpClientUtils {
// GET
private static <T> T httpGet(String url, Map<String, Object> map, Class<T> clazz) {
// 拼接参数字符串
String after = "";
if(map != null) {
StringBuilder stringBuilder = new StringBuilder("?");
for (Map.Entry<String, Object> entry : map.entrySet()) {
stringBuilder
.append(entry.getKey())
.append("=")
.append(entry.getValue())
.append("&");
}
// System.out.println("拼接的字符串:" + stringBuilder.substring(0, stringBuilder.length() - 1));
after = stringBuilder.substring(0, stringBuilder.length() - 1);
}
// 创建client浏览器对象
HttpClient httpClient = HttpClientBuilder.create().build();
HttpGet httpGet = new HttpGet(url + after);
// 创建响应对象
HttpResponse response = null;
try {
// 运行并获取响应
response = httpClient.execute(httpGet);
HttpEntity entity = response.getEntity();
if (entity != null) {
T t = JSON.parseObject(EntityUtils.toString(entity), clazz);
return t;
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
// 有参POST
private static <T> T httpPost(String url, Map<String, Object> map,Map<String, Object> dataMap, Class<T> clazz) {
// 拼接参数字符串
String after = "";
if(map != null) {
StringBuilder stringBuilder = new StringBuilder("?");
for (Map.Entry<String, Object> entry : map.entrySet()) {
stringBuilder
.append(entry.getKey())
.append("=")
.append(entry.getValue())
.append("&");
}
System.out.println("拼接的字符串:" + stringBuilder.substring(0, stringBuilder.length() - 1));
after = stringBuilder.substring(0, stringBuilder.length() - 1);
}
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost(url +after);
String jsonStr = JSON.toJSONString(dataMap);
HttpEntity entity = new StringEntity(jsonStr, "utf8");
httpPost.setHeader("Content-Type", "application/json;charset=utf8");
httpPost.setEntity(entity);
CloseableHttpResponse response = null;
try{
response = httpClient.execute(httpPost);
HttpEntity entity1 = response.getEntity();
System.out.println("resp:"+ response);
return JSON.parseObject(EntityUtils.toString(entity1), clazz);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/*
* 参数说明:
* url:准备请求的url
* urlMap:url上需要带上的参数,是?之后的参数
* dataMap:用于带上请求的数据
* httpMethod:HttpMethod的静态常量,指明要调用的方法
* clazz:class类对象,如果有数据返回,需要将数据序列化为什么类型。
* */
public static <T> T send(String url, Map<String, Object> urlMap, Map<String, Object> dataMap, HttpMethod httpMethod, Class<T> clazz) {
// 调用GET
if(httpMethod.matches("GET")) {
return httpGet(url, urlMap, clazz);
} else if(httpMethod.matches("POST")) {
return httpPost(url, urlMap, dataMap, clazz);
} else if(httpMethod.matches("PUT")) {
} else if(httpMethod.matches("DELETE")) {
}
return null;
}
}
目前只写了GET和POST的方法,后续方法暂时没有更新,大家可以根据我提供的模板自己添加。