一、添加依赖
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.4.1</version>
</dependency>
二、封装请求工具类
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import java.io.IOException;
import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Slf4j
@SuppressWarnings("all")
public class OkHttpUtils {
/**
* 发送get请求
*
* @param url
* @param params
* @param tClass
* @return <T>
*/
public static <T> T getRequest(String url, Map<String, Object> params, Class<T> tClass) {
return getRequest(url, null, params, tClass);
}
/**
* 发送get请求
*
* @param url
* @param params
* @param tClass
* @return <T>
*/
public static <T> T getRequest(String url, Map<String, Object> headers, Map<String, Object> params, Class<T> tClass) {
// 超时时间为60s
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(3, TimeUnit.MINUTES)
.readTimeout(3, TimeUnit.MINUTES)
.writeTimeout(3, TimeUnit.MINUTES)
// 设置空闲连接数为0个,每个空闲连接的存活时间为1纳秒
.connectionPool(new ConnectionPool(0, 1, TimeUnit.NANOSECONDS))
.protocols(Arrays.asList(Protocol.HTTP_1_1))
.build();
HttpUrl.Builder httpBuilder = HttpUrl.parse(url).newBuilder();
if (params != null) {
params.forEach((k, v) -> httpBuilder.addQueryParameter(k, String.valueOf(v)));
}
Request.Builder requestBuilder = new Request.Builder();
if (headers != null) {
headers.forEach((k, v) -> requestBuilder.addHeader(k, String.valueOf(v)));
}
Request request = requestBuilder
.url(httpBuilder.build())
.get()
.addHeader("Content-Type", "application/x-www-form-urlencoded")
.build();
try {
Response response = client.newCall(request).execute();
String string = response.body().string();
log.info("响应结果:" + string);
return JSON.parseObject(string, tClass);
} catch (IOException e) {
if (e.getMessage().contains("timeout"))
log.error("请求超时,请您稍后重试!", e);
else log.error("未知错误,请您稍后重试!", e);
} catch (Exception e) {
log.error("系统错误,请您联系客服!", e);
}
}
/**
* 发送post请求,参数为json格式
*
* @param url
* @param jsonStr
* @param tClass
* @return <T>
*/
public static <T> T postRequest(String url, String jsonStr, Class<T> tClass) {
return postRequest(url, null, jsonStr, tClass);
}
/**
* 发送post请求,参数为json格式
*
* @param url
* @param headers
* @param jsonStr
* @param tClass
* @return <T>
*/
public static <T> T postRequest(String url, Map<String, Object> headers, String jsonStr, Class<T> tClass) {
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(3, TimeUnit.MINUTES)
.readTimeout(3, TimeUnit.MINUTES)
.writeTimeout(3, TimeUnit.MINUTES)
// 设置空闲连接数为0个,每个空闲连接的存活时间为1纳秒
.connectionPool(new ConnectionPool(0, 1, TimeUnit.NANOSECONDS))
.protocols(Arrays.asList(Protocol.HTTP_1_1))
.build();
MediaType type = MediaType.parse("application/json;charset=utf-8");
if (jsonStr == null || "".equals(jsonStr)) {
jsonStr = "{}";
}
RequestBody requestBody = RequestBody.create(type, jsonStr);
Request.Builder requestBuilder = new Request.Builder();
if (headers != null) {
headers.forEach((k, v) -> requestBuilder.addHeader(k, String.valueOf(v)));
}
Request request = requestBuilder
.url(url)
.post(requestBody)
.addHeader("Content-Type", "application/json;charset=utf-8")
.build();
try {
Response response = client.newCall(request).execute();
String string = response.body().string();
log.info("响应结果:" + string);
return JSON.parseObject(string, tClass);
} catch (IOException e) {
if (e.getMessage().contains("timeout"))
log.error("请求超时,请您稍后重试!", e);
else log.error("未知错误,请您稍后重试!", e);
} catch (Exception e) {
log.error("系统错误,请您联系客服!", e);
}
}
/**
* 发送post请求,参数为json格式
*
* @param url
* @param params
* @param tClass
* @return <T>
*/
public static <T> T postRequest(String url, Map<String, Object> params, Class<T> tClass) {
return postRequest(url, null, params, tClass);
}
/**
* 发送post请求,参数为json格式
*
* @param url
* @param headers
* @param params
* @param tClass
* @return <T>
*/
public static <T> T postRequest(String url, Map<String, Object> headers, Map<String, Object> params, Class<T> tClass) {
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(3, TimeUnit.MINUTES)
.readTimeout(3, TimeUnit.MINUTES)
.writeTimeout(3, TimeUnit.MINUTES)
// 设置空闲连接数为0个,每个空闲连接的存活时间为1纳秒
.connectionPool(new ConnectionPool(0, 1, TimeUnit.NANOSECONDS))
.protocols(Arrays.asList(Protocol.HTTP_1_1))
.build();
MediaType type = MediaType.parse("application/json;charset=utf-8");
String jsonStr = "{}";
if (params != null && !params.isEmpty()) {
jsonStr = JSON.toJSONString(params);
}
RequestBody requestBody = RequestBody.create(type, jsonStr);
Request.Builder requestBuilder = new Request.Builder();
if (headers != null) {
headers.forEach((k, v) -> requestBuilder.addHeader(k, String.valueOf(v)));
}
Request request = requestBuilder
.url(url)
.post(requestBody)
.addHeader("Content-Type", "application/json;charset=utf-8")
.build();
try {
Response response = client.newCall(request).execute();
String string = response.body().string();
log.info("响应结果:" + string);
return JSON.parseObject(string, tClass);
} catch (IOException e) {
if (e.getMessage().contains("timeout"))
log.error("请求超时,请您稍后重试!", e);
else log.error("未知错误,请您稍后重试!", e);
} catch (Exception e) {
log.error("系统错误,请您联系客服!", e);
}
}
/**
* 发送post请求,参数为form格式
*
* @param url
* @param params
* @param tClass
* @return <T>
*/
public static <T> T postFormRequest(String url, Map<String, Object> params, Class<T> tClass) {
return postFormRequest(url, null, params, tClass);
}
/**
* 发送post请求,参数为form格式
*
* @param url
* @param headers
* @param params
* @param tClass
* @return <T>
*/
public static <T> T postFormRequest(String url, Map<String, Object> headers, Map<String, Object> params, Class<T> tClass) {
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(3, TimeUnit.MINUTES)
.readTimeout(3, TimeUnit.MINUTES)
.writeTimeout(3, TimeUnit.MINUTES)
// 设置空闲连接数为0个,每个空闲连接的存活时间为1纳秒
.connectionPool(new ConnectionPool(0, 1, TimeUnit.NANOSECONDS))
.protocols(Arrays.asList(Protocol.HTTP_1_1))
.build();
// 创建表单体
FormBody.Builder formBodyBuilder = new FormBody.Builder();
// 添加表单数据
if (params != null) {
params.forEach((k, v) -> {
String newVal = "";
if (v instanceof String) {
newVal = (String) v;
} else {
newVal = JSON.toJSONString(v);
}
formBodyBuilder.add(k, newVal);
});
}
FormBody formBody = formBodyBuilder.build();
Request.Builder requestBuilder = new Request.Builder();
if (headers != null) {
headers.forEach((k, v) -> requestBuilder.addHeader(k, String.valueOf(v)));
}
Request request = requestBuilder
.url(url)
.post(formBody)
.build();
try {
Response response = client.newCall(request).execute();
String string = response.body().string();
log.info("响应结果:" + string);
return JSON.parseObject(string, tClass);
} catch (IOException e) {
if (e.getMessage().contains("timeout"))
log.error("请求超时,请您稍后重试!", e);
else log.error("未知错误,请您稍后重试!", e);
} catch (Exception e) {
log.error("系统错误,请您联系客服!", e);
}
}
}