先前写了一个OKHttp3方式的http请求工具类,对比学习RestTemplate方式。相关的概念、原理各位可自行学习,这里分享一下RestTemplate方式的工具类。
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
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.util.EntityUtils;
import org.springframework.http.*;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
/**
* http请求工具类
*
*/
public class HttpUtil {
/**
* get请求
*
* @param url
* @param params 请求参数
* @return
*/
public static String get(String url, MultiValueMap<String, String> params) {
return get(url, params, null);
}
/**
* get请求
*
* @param url
* @param params 请求参数
* @param headers 请求头
* @return
*/
public static String get(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
return request(url, params, headers, HttpMethod.GET);
}
/**
* post请求
*
* @param url
* @param params 请求参数
* @return
*/
public static String post(String url, MultiValueMap<String, String> params) {
return post(url, params, null);
}
/**
* post请求
*
* @param url
* @param params 请求参数
* @param headers 请求头
* @return
*/
public static String post(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
return request(url, params, headers, HttpMethod.POST);
}
/**
* put请求
*
* @param url
* @param params 请求参数
* @return
*/
public static String put(String url, MultiValueMap<String, String> params) {
return put(url, params, null);
}
/**
* put请求
*
* @param url
* @param params 请求参数
* @param headers 请求头
* @return
*/
public static String put(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
return request(url, params, headers, HttpMethod.PUT);
}
/**
* delete请求
*
* @param url
* @param params 请求参数
* @return
*/
public static String delete(String url, MultiValueMap<String, String> params) {
return delete(url, params, null);
}
/**
* delete请求
*
* @param url
* @param params 请求参数
* @param headers 请求头
* @return
*/
public static String delete(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
return request(url, params, headers, HttpMethod.DELETE);
}
/**
* 表单请求
*
* @param url
* @param params 请求参数
* @param headers 请求头
* @param method 请求方式
* @return
*/
public static String request(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers, HttpMethod method) {
if (params == null) {
params = new LinkedMultiValueMap<>();
}
return request(url, params, headers, method, MediaType.APPLICATION_FORM_URLENCODED);
}
/**
* http请求
*
* @param url
* @param params 请求参数
* @param headers 请求头
* @param method 请求方式
* @param mediaType 参数类型
* @return
*/
public static String request(String url, Object params, MultiValueMap<String, String> headers, HttpMethod method, MediaType mediaType) {
if (url == null || url.trim().isEmpty()) {
return null;
}
RestTemplate client = new RestTemplate();
// header
HttpHeaders httpHeaders = new HttpHeaders();
if (headers != null) {
httpHeaders.addAll(headers);
}
// 提交方式:表单、json
httpHeaders.setContentType(mediaType);
HttpEntity<Object> httpEntity = new HttpEntity(params, httpHeaders);
ResponseEntity<String> response = client.exchange(url, method, httpEntity, String.class);
return response.getBody();
}
public static String doPostJson(String url, Map<String, String> headerMap, String json) {
// 创建Httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = null;
String resultString = "";
try {
// 创建Http Post请求
HttpPost httpPost = new HttpPost(url);
if (headerMap != null) {
Iterator headerIterator = headerMap.entrySet().iterator(); //循环增加header
while(headerIterator.hasNext()){
Map.Entry<String,String> elem = (Map.Entry<String, String>) headerIterator.next();
httpPost.addHeader(elem.getKey(),elem.getValue());
}
}
// 创建请求内容
StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
httpPost.setEntity(entity);
// 执行http请求
response = httpClient.execute(httpPost);
resultString = EntityUtils.toString(response.getEntity(), "UTF8");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
response.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return resultString;
}
}