在系统编写的时候,常常会与外围系统的接口进行对接,或者调用一些子系统的接口,那么此时会涉及到http请求。

在以往,我没有采用统一的方式编写这类程序,会使用hutool、RestTemplate,所以,在此,我想给自己编写一套统一的请求方式,以便学习。

采用框架:OkHttp3,原因是了解到此框架性能良好,安全性好。

需求:

  1. 普通的get、post请求
  2. 异步的post请求

OkHttp基础概念

一、OkHttpClient

此类是框架的核心客户端

上手使用

添加Maven依赖

<dependency>

<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.12.0</version> <!-- 2023年最新稳定版 -->

</dependency>

工具类


package org.example;

import okhttp3.*;

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

/**
 * 基于okhttp4的http请求工具类
 * @author songtingwu
 */
public class HttpUtil {
    /**
     * 全局单例客户端
     */
    private static final OkHttpClient client = new OkHttpClient.Builder()
            .callTimeout(30, TimeUnit.SECONDS)
            .build();
    private HttpUtil(){}
    /**
     * 同步的Get请求
     */
    public static String get(String url, Map<String, Object> queryParams) throws Exception{
        // 构建HttpUrl
        HttpUrl httpUrl = buildGetUrl(url, queryParams);
        // 封装Request请求信息
        Request request = new Request.Builder()
                .url(httpUrl)
                .get()
                .build();
        // 执行请求
        try (Response response = client.newCall(request).execute();) {
            if ( response.isSuccessful() ){
                // 请求成功
                return response.body().string();
            }else{
                throw new Exception(response.message());
            }
        }catch (Exception e){
            throw e;
        }
    }

    private static HttpUrl buildGetUrl(String url, Map<String, Object> params) throws Exception{
        if(url == null || "".equals(url)){
            throw new Exception("请求url不能为空");
        }
        // 创建基础URL
        HttpUrl.Builder urlBuilder = HttpUrl.parse(url)
                .newBuilder();
        if(params != null && !params.isEmpty()){
            // 添加参数
            for (Map.Entry<String, Object> entry : params.entrySet()) {
                urlBuilder.addQueryParameter(entry.getKey(), String.valueOf(entry.getValue()));
            }
        }
        HttpUrl httpUrl = urlBuilder.build();
        return httpUrl;
    }
}


哈哇哇哈哈哈哇
1 声望0 粉丝

Java工程师


« 上一篇
Linux命令随记