首页 > 编程语言 >Java-OkHttpUtil扩展工具类

Java-OkHttpUtil扩展工具类

时间:2024-03-14 15:46:20浏览次数:22  
标签:OkHttpUtil Java String call url 扩展 param params return

先把基于OkHttp的使用进行工具化,形成公共类

配置引入

        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>3.14.4</version>
        </dependency>

扩展工具

import lombok.extern.slf4j.Slf4j;
import okhttp3.*;

import java.io.IOException;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * OkHttpUtil
 */
@Slf4j
public class TyOkHttpUtil {
    private static final OkHttpClient client =
            new OkHttpClient.Builder()
                    .readTimeout(5, TimeUnit.SECONDS)       // 设置超时时间
                    .build();


    public static final MediaType MEDIA_TYPE_JSON = MediaType.get("application/json; charset=utf-8");


    /**
     * 发起Get请求
     *
     * @param url    url
     * @param params 参数
     * @return 响应结果
     */
    public static String doGet(String url, Map<String, Object> params) {
        Call call = createGetCall(url, params);
        return execute(call);
    }

    /**
     * 发起 Post请求, 使用form表单参数
     *
     * @param url    url
     * @param params 参数
     * @return 响应结果
     */
    public static String doPost(String url, Map<String, Object> params) {
        Call call = createPostCall(url, params);
        return execute(call);
    }

    /**
     * 发起 post请求, 使用json参数
     *
     * @param url  url
     * @param json json参数
     * @return resp
     */
    public static String doPost(String url, String json) {
        Call call = createPostJsonCall(url, json);
        return execute(call);
    }


    /**
     * [异步] 发起Get请求
     *
     * @param url      url
     * @param params   参数
     * @param callback 回调方法
     */
    public static void doGetAsync(String url, Map<String, Object> params, Callback callback) {
        Call call = createGetCall(url, params);
        call.enqueue(callback);
    }

    /**
     * [异步] 发起 Post请求
     *
     * @param url    url
     * @param params 参数
     */
    public static void doPostAsync(String url, Map<String, Object> params, Callback callback) {
        Call call = createPostCall(url, params);
        call.enqueue(callback);
    }

    /**
     * [异步] 发起 post请求, 使用json参数
     *
     * @param url  url
     * @param json json参数
     */
    public static void doPostAsync(String url, String json, Callback callback) {
        Call call = createPostJsonCall(url, json);
        call.enqueue(callback);
    }


    /**
     * Get请求, 构造 Call对象
     *
     * @param url    请求url
     * @param params 请求参数
     * @return Call
     */
    private static Call createGetCall(String url, Map<String, Object> params) {

        Request.Builder builder = new Request.Builder();
        Request request = builder.url(url).build();
        // 设置参数
        HttpUrl httpUrl = createHttpUrl(request, params);
        builder.url(httpUrl).build();

        return client.newCall(builder.build());
    }

    /**
     * Post请求, 构造 Call对象
     *
     * @param url    请求url
     * @param params 请求参数
     * @return Call
     */
    private static Call createPostCall(String url, Map<String, Object> params) {
        Request request = new Request.Builder()
                .post(createFormBody(params))
                .url(url)
                .build();
        return client.newCall(request);
    }

    /**
     * Post请求, 构造 Call对象
     *
     * @param url  请求url
     * @param json 请求参数
     * @return Call
     */
    private static Call createPostJsonCall(String url, String json) {
        Request request = new Request.Builder()
                .post(RequestBody.create(MEDIA_TYPE_JSON, json))
                .url(url)
                .build();
        return client.newCall(request);
    }


    /**
     * 为 get请求设置参数
     *
     * @param request request对象
     * @param params 请求参数
     * @return 设置了参数的 HttpUrl对象
     */
    private static HttpUrl createHttpUrl(Request request, Map<String, Object> params) {
        HttpUrl.Builder urlBuilder = request.url().newBuilder();
        if (params != null && params.size() > 0) {
            for (Map.Entry<String, Object> entry : params.entrySet()) {
                urlBuilder.addQueryParameter(entry.getKey(), String.valueOf(entry.getValue()));
            }
        }
        return urlBuilder.build();
    }


    /**
     * 为 post请求设置参数
     *
     * @param params 请求参数
     * @return FormBody
     */
    private static FormBody createFormBody(Map<String, Object> params) {
        FormBody.Builder builder = new FormBody.Builder();
        if (params != null && params.size() > 0) {
            for (Map.Entry<String, Object> entry : params.entrySet()) {
                builder.add(entry.getKey(), String.valueOf(entry.getValue()));
            }
        }
        return builder.build();
    }


    /**
     * 同步执行 http请求
     *
     * @param call call对象
     * @return 响应结果
     */
    public static String execute(Call call) {
        String respStr = "";
        try {
            ResponseBody body = call.execute().body();
            if (body != null) {
                respStr = body.string();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return respStr;
    }
}

使用示例

        //拼接参数
        String tgFullUrl="http://xxx.com/abc";
        String objRet="";
        String xbUserToken="test";
String xbAppToken="test"; Map<String, Object> listKv=new HashMap<>();
try { listKv.put("xbUserToken",xbUserToken); listKv.put("xbAppToken",XbAppToken); listKv.put("current","1"); listKv.put("limit","10"); listKv.put("pageSize","10"); listKv.put("filters","leiXing eq xw"); listKv.put("orderBy","update_time desc"); queryData=TyOkHttpUtil.doGet(tgFullUrl,listKv); if(StringUtils.isEmpty(queryData)){ return objRet; } } catch (Exception ex){ log.error(ex.getMessage(),ex); return objRet; }

测试Ok

 

标签:OkHttpUtil,Java,String,call,url,扩展,param,params,return
From: https://www.cnblogs.com/oumi/p/18073010

相关文章

  • 用JavaSocket编程开发聊天室
    1.设计内容1.用Java图形用户界面编写聊天室服务器端和客户端,支持多个客户端连接到一个服务器。每个客户端能够输入账号。2.可以实现群聊(聊天记录显示在所有客户端界面)。3.完成好友列表在各个客户端上显示。4.可以实现私人聊天,用户可以选择某个其他用户,单独发送信息。......
  • Java(计算机相关)面试之海量数据问题处理(1)分治/hash/排序
    原文链接:https://blog.csdn.net/a619602087/article/details/130348569面试的时候经常被问到海量数据处理问题,下面我会分期介绍几种海量数据处理的思路还有案例了解了之后面试不用怕了大数据处理思路:分而治之/Hash映射+HashMap统计+堆/快速/归并排序分而治之/hash映射:......
  • Java面试八股文01-基础部分
    Java文件执行流程编译:将.java文件编译为虚拟机可以识别的.class字节码文件解释:虚拟机执行java字节码文件,将其转化为机器可以执行的机器码执行:机器执行机器码面向对象的三大特性封装继承多态深拷贝和浅拷贝浅拷贝代码举例publicclassPersonimplementsCloneable......
  • Java登陆第三十五天——VUE初始页面解析
    Vite创建的默认Vue3项目中package.json文件信息如下:{"name":"vmoudle1","private":true,"version":"0.0.0","type":"module","scripts":{"dev":"vite",......
  • 身份证查询-身份认证-javascript实名认证接口
    翔云身份证实名认证接口将与网络平台携手共筑信息安全防线,守护每一笔交易的真实可信,助力您的企业在数字化浪潮中稳健前行!以下是javascript语言调用翔云身份证实名认证API的代码:varform=newFormData();form.append("img","/9j");form.append("key","M***********g");fo......
  • Java登陆第三十五天——Vite+Vue3目录结构、.vue文件理解(SFC)
    项目结构使用Vite创建Vue3+JS默认项目结构如下:(vmoudle1是项目名)Vue中提出了组件的概念。组件是代码复用的一种方式,用于抽象出一个可复用的UI,方便在不同的场景中进行重复使用。组件根据大小可被分为:(从小到大)1.组件2.布局组件3.页面级别组件.vscode忽略node......
  • 精通Spring Boot单元测试:构建健壮的Java应用
    引言:在当今软件开发领域,单元测试已经成为确保应用质量和可维护性的关键步骤。特别是在Java生态系统中,SpringBoot框架作为一种广泛应用的解决方案,其对于单元测试的支持更是让开发者受益匪浅。本博客的目标是为开发者提供一份清晰易懂的指南,帮助他们利用SpringBoot框架构建......
  • Java复习第二天学习笔记,附有道云笔记链接
    【有道云笔记】二3.13https://note.youdao.com/s/RWOQv0g一、运算符1.基本运算符+-*/@Testpublicvoidtest2(){System.out.println("运算符.test2");//双目运算符intnum1=3,num2=5;intresult=num1+num2;System.out.println(result);System.out.prin......
  • java毕设安卓基于Android的志愿者服务系统(开题+源码)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景在当今信息化社会,移动互联网技术的迅猛发展正深刻改变着人们的生活方式。特别是在社会公益领域,志愿者服务作为社会文明进步的重要标志,其组织与管......
  • 华为OD技术C卷“测试用例执行计划”Java解答
    描述示例算法思路1整体思路是,先读取特性的优先级和测试用例覆盖的特性列表,然后计算每个测试用例的优先级,并将其与测试用例的索引存储到二维数组中。最后按照优先级和索引排序,输出测试用例的索引,即为执行顺序。 首先从标准输入中读取了两个整数n和m,分别表示特性的数......