一、添加依赖
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.4.1</version>
</dependency>
二、封装请求工具类
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@SuppressWarnings("all")
@Slf4j
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) {
// 超时时间为60s
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(60, TimeUnit.SECONDS) // connect timeout
.readTimeout(60, TimeUnit.SECONDS) // socket timeout
.build();
HttpUrl.Builder httpBuilder = HttpUrl.parse(url).newBuilder();
if (params != null) {
params.forEach((k, v) -> httpBuilder.addQueryParameter(k, (String) v));
}
Request request = new Request.Builder()
.url(httpBuilder.build())
.get()
.addHeader("Content-Type", "application/x-www-form-urlencoded")
.build();
try {
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
String string = response.body().string();
log.info("响应结果:" + string);
return JSON.parseObject(string, tClass);
} else {
log.error("未知错误:" + response);
throw new IOException("未知错误!");
}
} catch (IOException e) {
log.error(e.getMessage(), e);
throw new RuntimeException(e.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new RuntimeException("系统错误!");
}
}
/**
* 发送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(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.build();
MediaType type = MediaType.parse("application/json;charset=utf-8");
JSONObject json = new JSONObject();
if (params != null) {
params.forEach((k, v) -> json.put(k, v));
}
RequestBody requestBody = RequestBody.create(type, String.valueOf(json));
Request.Builder requestBuilder = new Request.Builder();
if (headers != null) {
headers.forEach((k, v) -> requestBuilder.addHeader(k, (String) v));
}
Request request = requestBuilder
.url(url)
.post(requestBody)
.addHeader("Content-Type", "application/json;charset=utf-8")
.build();
try {
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
String string = response.body().string();
log.info("响应结果:" + string);
return JSON.parseObject(string, tClass);
} else {
log.error("未知错误:" + response);
throw new IOException("未知错误!");
}
} catch (IOException e) {
log.error(e.getMessage(), e);
throw new RuntimeException(e.getMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new RuntimeException("系统错误!");
}
}
}