/** * OkHttp 工具类 */@Slf4jpublic class OkHttpUtil { private OkHttpUtil() { } ////////////////////////////////////////////////////////////////////////// // OkHttpClient Singleton ////////////////////////////////////////////////////////////////////////// public static OkHttpClient getOKHttpClientInstance() { return LazyLoad.client; } private static class LazyLoad { private static final OkHttpClient client = new OkHttpClient(); } ////////////////////////////////////////////////////////////////////////// // util method ////////////////////////////////////////////////////////////////////////// /** * <h2>执行post请求,注意要求目标接口返回响应头具有application/json </h2> * * @param url 请求地址 * @param param 携带的参数实体类 * @param headersParam 请求头参数 * @param <T> 实体类类型 * @return {@link Response} 响应 * @throws IOException 执行请求时可能出现的异常 */ public static <T> Response doPost(String url, T param, Map<String, String> headersParam) throws IOException { MediaType contentType = MediaType.get(org.springframework.http.MediaType.APPLICATION_JSON_VALUE); RequestBody requestBody = RequestBody.create(JSON.toJSONString(param), contentType); // 构建 headers Headers headers = _buildHeaders(headersParam); // 构建 request Request request = new Request.Builder() .headers(headers) .url(url) .post(requestBody) .build(); // 执行请求, 直接返回即可 return getOKHttpClientInstance().newCall(request).execute(); // sb了, 居然直接关掉流了。导致出现了 java.lang.IllegalStateException: closed // try (Response response = getOKHttpClientInstance().newCall(request).execute()) { // return response; // } catch (IOException e) { // log.error("请求url: {}时候发生了错误: {}", url, e.getLocalizedMessage(), e); // throw e; // } } /** * 填充 header 为 headers * * @param headersParam {@link Map} headers 头 * @return {@link Headers} okHttp 的 headers 头 */ private static Headers _buildHeaders(Map<String, String> headersParam) { Headers.Builder headerBuilder = new Headers.Builder(); for (Map.Entry<String, String> entry : headersParam.entrySet()) { headerBuilder.add(entry.getKey(), entry.getValue()); } return headerBuilder.build(); }}