1、引入
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.14</version>
</dependency>
2、工具类封装
@Slf4j
public class HttpUtils {
/**
* 超时毫秒数。http的连接与读取
*/
private static final int TIME_OUT_MILLISECONDS = 60000;
/**
* Content-Type
*/
private static final String CONTENT_TYPE_JSON = "application/json; charset=utf-8";
private static final String CONTENT_TYPE_FORM = "multipart/form-data";
/**
* GET请求
*/
public static HttpResultResponse get(String url) {
return get(url, null);
}
public static HttpResultResponse get(String url, Map<String, String> headerMap) {
HttpResultResponse httpResultResponse = new HttpResultResponse();
try {
HttpResponse response = HttpRequest
.get(url)
.timeout(TIME_OUT_MILLISECONDS)
.addHeaders(headerMap)
.execute();
if (!response.isOk()) {
log.error("HttpUtils get 响应失败. url={},headerMap={}, response={}", url, headerMap, response.toString());
return httpResultResponse.buildError();
}
return httpResultResponse.buildSuccess(response.body());
} catch (HttpException e) {
log.error("HttpUtils get HttpException异常. url={},headerMap={}", url, headerMap, e);
return httpResultResponse.buildError(e.getMessage());
} catch (Exception e) {
log.error("HttpUtils get Exception异常. url={},headerMap={}", url, headerMap, e);
return httpResultResponse.buildError(e.getMessage());
}
}
public static HttpResultResponse post(String url, Object postBody) {
return post(url, postBody, null);
}
/**
* post 请求
*
* @param url 请求链接
* @param postBody 请求对象 or 请求json字符串
* @param headerMap 请求头map
*
* @return HttpResultResponse
*/
public static HttpResultResponse post(String url, Object postBody, Map<String, String> headerMap) {
HttpResultResponse httpResultResponse = new HttpResultResponse();
try {
HttpRequest httpRequest = HttpRequest
.post(url)
.timeout(TIME_OUT_MILLISECONDS)
.addHeaders(headerMap);
if (postBody instanceof byte[]) {
httpRequest.body((byte[]) postBody);
} else if (postBody instanceof String) {
httpRequest.body((String) postBody);
} else {
httpRequest.body(JSON.toJSONString(postBody), CONTENT_TYPE_JSON);
}
HttpResponse response = httpRequest.execute();
if (!response.isOk()) {
log.error("HttpUtils post 响应失败. url={},postBody={}, headerMap={}, response={}", url, postBody,
headerMap, response.toString());
return httpResultResponse.buildError();
}
return httpResultResponse.buildSuccess(response.body());
} catch (HttpException e) {
log.error("HttpUtils post HttpException异常. url={},postBody={}, headerMap={}", url, postBody, headerMap, e);
return httpResultResponse.buildError(e.getMessage());
} catch (Exception e) {
log.error("HttpUtils post Exception异常. url={},postBody={},headerMap={}", url, postBody, headerMap, e);
return httpResultResponse.buildError(e.getMessage());
}
}
public static HttpResultResponse postByForm(String url, Object postBody, Map<String, String> headerMap) {
HttpResultResponse httpResultResponse = new HttpResultResponse();
String body;
if (postBody instanceof String) {
body = (String) postBody;
} else {
body = JSON.toJSONString(postBody);
}
try {
HttpResponse response = HttpRequest
.post(url)
.body(body, CONTENT_TYPE_FORM)
.timeout(TIME_OUT_MILLISECONDS)
.addHeaders(headerMap)
.execute();
if (!response.isOk()) {
log.error("HttpUtils post 响应失败. url={},postBody={}, headerMap={}, response={}", url, postBody,
headerMap, response.toString());
return httpResultResponse.buildError();
}
return httpResultResponse.buildSuccess(response.body());
} catch (HttpException e) {
log.error("HttpUtils post HttpException异常. url={},postBody={}, headerMap={}", url, postBody, headerMap, e);
return httpResultResponse.buildError(e.getMessage());
} catch (Exception e) {
log.error("HttpUtils post Exception异常. url={},postBody={},headerMap={}", url, postBody, headerMap, e);
return httpResultResponse.buildError(e.getMessage());
}
}
/**
* put 请求, 无header
*
* @param url 链接
* @param putBody 请求对象 or 请求json字符串
*
* @return HttpResultResponse
*/
public static HttpResultResponse put(String url, Object putBody) {
return put(url, putBody, null);
}
/**
* put 请求
*
* @param url 请求链接
* @param putBody 请求对象 or 请求json字符串
* @param headerMap 请求头map
*
* @return HttpResultResponse
*/
public static HttpResultResponse put(String url, Object putBody, Map<String, String> headerMap) {
HttpResultResponse httpResultResponse = new HttpResultResponse();
try {
HttpRequest httpRequest = HttpRequest
.put(url)
.timeout(TIME_OUT_MILLISECONDS)
.addHeaders(headerMap);
if (putBody instanceof byte[]) {
httpRequest.body((byte[]) putBody);
} else if (putBody instanceof String) {
httpRequest.body((String) putBody);
} else {
httpRequest.body(JSON.toJSONString(putBody), CONTENT_TYPE_JSON);
}
HttpResponse response = httpRequest.execute();
if (!response.isOk()) {
log.error("HttpUtil put 响应失败. url={},putBody={}, headerMap={}, response={}", url, putBody,
headerMap, response.toString());
return httpResultResponse.buildError();
}
return httpResultResponse.buildSuccess(response.body());
} catch (HttpException e) {
log.error("HttpUtil put HttpException异常. url={},putBody={}, headerMap={}", url, putBody, headerMap, e);
return httpResultResponse.buildError(e.getMessage());
} catch (Exception e) {
log.error("HttpUtil put Exception异常. url={},putBody={},headerMap={}", url, putBody, headerMap, e);
return httpResultResponse.buildError(e.getMessage());
}
}
}
自定义的http响应对象HttpResultResponse:
@Data
public class HttpResultResponse {
/**
* 响应成功 or 失败
*/
private Boolean success;
/**
* 信息提示
*/
private String message;
/**
* http响应的body
*/
private String body;
public HttpResultResponse buildSuccess(String body) {
return buildSuccess(body, "响应成功");
}
public HttpResultResponse buildSuccess(String body, String message) {
this.success = true;
this.message = message;
this.body = body;
return this;
}
public HttpResultResponse buildError() {
return buildError("响应失败");
}
public HttpResultResponse buildError(String message) {
this.success = false;
this.message = message;
this.body = null;
return this;
}
}