欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 通用OkHttpClient工具 配合hutool的jsonobject

通用OkHttpClient工具 配合hutool的jsonobject

2024/10/25 5:21:54 来源:https://blog.csdn.net/qq_41808217/article/details/140927884  浏览:    关键词:通用OkHttpClient工具 配合hutool的jsonobject

项目场景

很多场景下我们需要通过http请求去访问三方资源的时候,需要一个通用性的http工具,此工具就是用在着方面的,本工具就是用原生的okhttp加以简单封装,配合使用hutool的工具的jsonobject,其中使用使用这个jsonobject的好处就是可以使用其getByPath获取到任意节点的结果,快速业务判断


依赖

提示:这里描述项目中遇到的问题:

例如:数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据
APP 中接收数据代码:

 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency><dependency><groupId>com.squareup</groupId><artifactId>okhttp3</artifactId><version>3.9.1</version></dependency>

工具代码

package utils;import cn.hutool.http.ContentType;
import cn.hutool.json.JSONObject;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;
import org.apache.commons.lang3.StringUtils;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.concurrent.TimeUnit;/*** 简单封装的okhttpcient工具用于返回同一反参** @author liaoqian* @date 2024-01-17*/
@Slf4j
@SuppressWarnings("all")
public class CommonOkHttpClientUtil {private static final String okHttpClientName = "commonOkHttpClientUtil";/*** 连接超时时间**/private static final int CONNECT_TIMEOUT_TEN_SECONDS = 10;/*** 读取返回信息超时时间**/private static final int READ_TIMEOUT_THIRTY_SECONDS = 30;private static OkHttpClient okHttpClient;static {if (okHttpClient == null) {synchronized (CommonOkHttpClientUtil.class) {if (okHttpClient == null) {okHttpClient = new OkHttpClient.Builder().connectTimeout(CONNECT_TIMEOUT_TEN_SECONDS, TimeUnit.SECONDS).readTimeout(READ_TIMEOUT_THIRTY_SECONDS, TimeUnit.SECONDS).retryOnConnectionFailure(true).build();}}}}/*** @param host    请求host* @param uri     请求uri* @param method  请求方式* @param headers 请求头* @param params  请求参数* @param body    请求体* @param <T>     泛型* @return 返回GreatonceAjaxModel*/public static JSONObject ajax(String host, String uri, String method, Map<String, String> headers, Map<String, String> params, Map<String, String> body) {Response response = ajaxProcess(host, uri, method, headers, params, body);JSONObject jsonObject = null;if (response != null) {try (ResponseBody responseBody = response.body()) {String result = responseBody.string();log.info("***** {} ajax result : {} *****", okHttpClientName, result);if (JSON.isValid(result)) {jsonObject = new JSONObject(result);} else {jsonObject = new JSONObject(result);}return jsonObject;} catch (Exception e) {log.error("***** {} ajaxProcess  e : {}  *****", okHttpClientName, e);}}return jsonObject;}private static Response ajaxProcess(String host, String uri, String method, Map<String, String> headers, Map<String, String> params, Map<String, String> body) {OkHttpClient client = okHttpClient;String url = host + uri;Request.Builder builder = new Request.Builder();// 请求头处理if (headers != null && !headers.isEmpty()) {builder.headers(Headers.of(headers));}// 请求方式处理if (true) {if (params != null && !params.isEmpty()) {StringBuilder sb = new StringBuilder();sb.append("?");params.entrySet().stream().forEach(e -> {sb.append(e.getKey()).append("=").append(String.valueOf(e.getValue())).append("&");});sb.delete(sb.length() - 1, sb.length());url += sb.toString();}builder.get();}if ("POST".equals(method.toUpperCase())) {if (body != null) {builder.post(RequestBody.create(MediaType.parse(ContentType.JSON.toString()), JSON.toJSONString(body)));}}Request request = builder.url(url).build();Response response = null;try {response = client.newCall(request).execute();} catch (IOException e) {log.error("***** {} ajaxProcess  e : {}  *****", okHttpClientName, e);}return response;}}

解决方案

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com