java okhttp3工具类

简介: java okhttp3工具类

public class HttpUtil {

private static Logger log = LoggerFactory.getLogger(HttpUtil.class);

public static final MediaType MEDIA_TYPE_MARKDOWN = MediaType.get("text/PermanentAuthorizationCodeResult-markdown; charset=utf-8");
public static final MediaType MEDIA_TYPE_URLENCODED = MediaType.get("application/PermanentAuthorizationCodeResult-www-form-urlencoded; charset=utf-8");
public static final MediaType MEDIA_TYPE_JSON = MediaType.get("application/json; charset=utf-8");

public static OkHttpClient client;
private static HttpLoggingInterceptor logging = new HttpLoggingInterceptor(message -> log.info("okhttp: {}", message));

/**
 * @return
 */
public static OkHttpClient client() {
    if (client == null) {
        // 包含header、body数据
        logging.level(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        // header body 日志
        builder.addInterceptor(logging);
        // 设置连接超时时间
        builder.connectTimeout(30, TimeUnit.SECONDS);
        // 设置读取超时时间
        builder.readTimeout(20, TimeUnit.SECONDS);
        client = builder.build();
    }
    return client;
}

/**
 * @return
 */
public static OkHttpClient client(Long connectTimeout, Long readTimeout) {
    OkHttpClient.Builder builder = new OkHttpClient.Builder();
    // 设置连接超时时间
    builder.connectTimeout(connectTimeout, TimeUnit.SECONDS);
    // 设置读取超时时间
    builder.readTimeout(readTimeout, TimeUnit.SECONDS);
    client = builder.build();
    return client;
}

/**
 * 发送POST请求
 *
 * @param url
 * @param json
 * @return
 */
public static <T> T httpPostWithJSON(String url, String json, Class<T> clazz) {
    String body = post(url, json, MEDIA_TYPE_JSON, null);
    if (StringUtils.isNotBlank(body)) {
        return JsonUtil.parseObject(body, clazz);
    }
    return null;
}

/**
 * 发送POST请求
 *
 * @param url
 * @param json
 * @return
 */
public static String postJson(String url, String json) {
    return post(url, json, MEDIA_TYPE_JSON, null);
}

/**
 * 发送POST请求
 *
 * @param url
 * @param json
 * @return
 */
public static String post(String url, String json, MediaType mediaType, Headers headers) {
    return post(url, RequestBody.create(json, mediaType), headers);
}

/**
 * 发送 get 请求
 *
 * @param url
 * @return
 */
public static String get(String url) {
    return get(url, null);
}

/**
 * 发送 get 请求
 *
 * @param url
 * @return
 */
public static String get(String url, Headers headers) {
    return get(url, headers, Maps.newHashMap());
}

/**
 * 发送 get 请求
 *
 * @param url
 * @return
 */
public static String get(String url, Headers headers, Map<String, Object> parameters) {
    HttpUrl.Builder httpBuilder = HttpUrl.parse(url).newBuilder();
    log.debug("get parameters={}", parameters);
    if (parameters != null && parameters.size() > 0) {
        for (Map.Entry<String, Object> param : parameters.entrySet()) {
            httpBuilder.addQueryParameter(param.getKey(), StringUtil.toString(param.getValue(), ""));
        }
    }
    Request.Builder builder = new Request.Builder();
    builder.url(httpBuilder.build());
    log.debug("get url={}", url);
    if (headers != null && headers.size() > 0) {
        builder.headers(headers);
        log.debug("get headers={}", headers);
    }
    builder.get();
    try {
        Response response = client().newCall(builder.build()).execute();
        log.info("url={},protocol:{},code:{},message:{}", url, response.protocol(), response.code(), response.message());
        String string = response.body().string();
        log.debug("response: {}", string);
        if (response.isSuccessful()) {
            return string;
        }
        return null;
    } catch (Exception e) {
        log.debug("url={},onFailure: {}", url, e.getMessage());
        //log.debug("getStackTrace: {}", e.getStackTrace());
    }
    return null;
}

/**
 * 设置请求头
 *
 * @param headersParams
 * @return
 */
public static Headers setHeaders(Map<String, String> headersParams) {
    Headers.Builder builder = new Headers.Builder();
    if (headersParams != null) {
        Iterator<String> iterator = headersParams.keySet().iterator();
        String key = "";
        while (iterator.hasNext()) {
            key = iterator.next().toString();
            builder.add(key, headersParams.get(key));
            log.info("headers key={},value={}", key, headersParams.get(key));
        }
    }
    return builder.build();
}

/**
 * 发送POST请求
 *
 * @param url
 * @param params
 * @return
 */
public static String post(String url, Map<String, String> params, Headers headers) {
    FormBody.Builder formBuilder = new FormBody.Builder();
    Set<String> keySet = params.keySet();
    for (String key : keySet) {
        formBuilder.add(key, params.get(key));
    }
    return post(url, formBuilder.build(), headers);
}

/**
 * 发送POST请求
 *
 * @param url
 * @param bean
 * @return
 */
public static <T> String post(String url, T bean, Headers headers) {
    FormBody.Builder formBuilder = new FormBody.Builder();
    if (bean != null) {
        BeanMap beanMap = BeanMap.create(bean);
        for (Object key : beanMap.keySet()) {
            formBuilder.add(StringUtil.toString(key), StringUtil.toString(beanMap.get(key)));
        }
    }
    return post(url, formBuilder.build(), headers);
}

/**
 * 发送POST请求
 *
 * @param url
 * @param requestBody
 * @return
 */
public static String post(String url, RequestBody requestBody, Headers headers) {
    Request.Builder builder = new Request.Builder();
    builder.url(url);
    log.debug("post url={}", url);
    if (headers != null && headers.size() > 0) {
        builder.headers(headers);
        log.debug("post headers={}", headers);
    }
    log.debug("post requestBody ={}", requestBody);
    builder.post(requestBody);
    try {
        Response response = client().newCall(builder.build()).execute();
        log.info("url={},protocol:{},code:{},message:{}", url, response.protocol(), response.code(), response.message());
        String string = response.body().string();
        log.debug("response: {}", string);
        if (response.isSuccessful()) {
            return string;
        }
        return null;
    } catch (Exception e) {
        log.debug("url={},onFailure: {}", url, e.getMessage());
        //log.debug("getStackTrace: {}", e.getStackTrace());
    }
    return null;
}

/**
 * 异步 发送POST请求 异步
 *
 * @param url
 * @param requestBody
 * @return
 */
public static void postAsyn(String url, RequestBody requestBody, Headers headers, Callback callback) {
    Request.Builder builder = new Request.Builder();
    builder.url(url);
    log.debug("postAsyn url={}", url);
    if (headers != null && headers.size() > 0) {
        builder.headers(headers);
        log.debug("post headers={}", headers);
    }
    builder.post(requestBody);
    Request request = builder.build();
    client().newCall(request).enqueue(callback);
}

/**
 * 异步 发送get请求  异步
 *
 * @param url
 * @return
 */
public static void getAsyn(String url, Headers headers, Callback callback) {
    Request.Builder builder = new Request.Builder();
    builder.url(url);
    log.debug("getAsyn url={}", url);
    if (headers != null && headers.size() > 0) {
        builder.headers(headers);
        log.debug("get headers={}", headers);
    }
    builder.get();
    Request request = builder.build();
    client().newCall(request).enqueue(callback);
}

/**
 * 发送get请求  异步
 *
 * @param url
 * @return
 */
public static void getAsyn(String url, Callback callback) {
    getAsyn(url, null, callback);
}

/**
 * 发送POST请求
 *
 * @return
 */
public static Callback callbackDemo() {
    return new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            log.info("error message = {}", e.getMessage());
            log.error("e={}", e);
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            log.debug("response= {}", response);
            log.info("response = {}", response.body().string());
        }
    };
}

}

相关文章
|
4月前
|
人工智能 JSON Java
列表结构与树结构转换分析与工具类封装(java版)
本文介绍了将线性列表转换为树形结构的实现方法及工具类封装。核心思路是先获取所有根节点,将其余节点作为子节点,通过递归构建每个根节点的子节点。关键在于节点需包含 `id`、`parentId` 和 `children` 三个属性。文中提供了两种封装方式:一是基于基类 `BaseTree` 的通用工具类,二是使用函数式接口实现更灵活的方式。推荐使用后者,因其避免了继承限制,更具扩展性。代码示例中使用了 Jackson 库进行 JSON 格式化输出,便于结果展示。最后总结指出,理解原理是进一步优化和封装的基础。
|
9月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
510 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
9月前
|
Java
Java 些许公共工具类
Java 些许公共工具类
57 1
|
11月前
|
缓存 前端开发 Java
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
【8月更文挑战第10天】java基础巩固,工具类的封装
76 1
【前端学java】java基础巩固复习巩固语法练习-工具类的封装(14)
|
11月前
|
Java
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
112 8
|
设计模式 缓存 算法
编写高效的Java工具类:实用技巧与设计模式
编写高效的Java工具类:实用技巧与设计模式
|
设计模式 存储 安全
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
125 1
|
安全 Java 开发者
Java中的并发工具类与线程安全实现
Java中的并发工具类与线程安全实现
|
设计模式 缓存 算法
编写高效的Java工具类:实用技巧与设计模式
编写高效的Java工具类:实用技巧与设计模式
|
并行计算 Java API
Java中的并发工具类详解
Java中的并发工具类详解
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问