亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot okhtt工具類封裝方式

 更新時間:2025年03月08日 10:46:21   作者:早起的年輕人  
本文介紹了如何在SpringBoot項目中使用OkHttp工具類進行HTTP請求,并提供了一個封裝了GET和POST方法的工具類示例,在Controller中使用該工具類時,需要注意OkHttpClient的靜態(tài)初始化和異常處理

SpringBoot okhtt工具類封裝

在 Spring Boot 項目中使用 OkHttp 可以方便地進行 HTTP 請求。

在pom.xml文件中添加 OkHttp 的依賴:

<dependencies>
    <!-- OkHttp -->
    <dependency>
        <groupId>com.squareup.okhttp3</groupId>
        <artifactId>okhttp</artifactId>
        <version>4.9.3</version>
    </dependency>
</dependencies>

以下是一個封裝了常見 HTTP 請求方法(GET、POST)的 OkHttp 工具類示例

import okhttp3.*;

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

/**
 * OkHttp 工具類,封裝常見的 HTTP 請求方法
 */
public class OkHttpUtils {

    private static final OkHttpClient client;

    static {
        // 初始化 OkHttpClient
        client = new OkHttpClient.Builder()
               .connectTimeout(10, TimeUnit.SECONDS) // 連接超時時間
               .readTimeout(30, TimeUnit.SECONDS)    // 讀取超時時間
               .writeTimeout(30, TimeUnit.SECONDS)   // 寫入超時時間
               .build();
    }

    /**
     * 發(fā)送 GET 請求
     *
     * @param url 請求的 URL
     * @return 響應結果字符串
     * @throws IOException 網(wǎng)絡請求異常
     */
    public static String sendGetRequest(String url) throws IOException {
        Request request = new Request.Builder()
               .url(url)
               .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful() && response.body() != null) {
                return response.body().string();
            }
            return null;
        }
    }

    /**
     * 發(fā)送帶參數(shù)的 GET 請求
     *
     * @param url    請求的 URL
     * @param params 請求參數(shù)
     * @return 響應結果字符串
     * @throws IOException 網(wǎng)絡請求異常
     */
    public static String sendGetRequest(String url, Map<String, String> params) throws IOException {
        HttpUrl.Builder urlBuilder = HttpUrl.parse(url).newBuilder();
        if (params != null) {
            for (Map.Entry<String, String> entry : params.entrySet()) {
                urlBuilder.addQueryParameter(entry.getKey(), entry.getValue());
            }
        }
        String finalUrl = urlBuilder.build().toString();

        return sendGetRequest(finalUrl);
    }

    /**
     * 發(fā)送 POST 請求,請求體為 JSON 格式
     *
     * @param url      請求的 URL
     * @param jsonBody JSON 格式的請求體
     * @return 響應結果字符串
     * @throws IOException 網(wǎng)絡請求異常
     */
    public static String sendPostRequest(String url, String jsonBody) throws IOException {
        MediaType JSON = MediaType.get("application/json; charset=utf-8");
        RequestBody body = RequestBody.create(jsonBody, JSON);

        Request request = new Request.Builder()
               .url(url)
               .post(body)
               .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful() && response.body() != null) {
                return response.body().string();
            }
            return null;
        }
    }

    /**
     * 發(fā)送 POST 請求,請求體為表單格式
     *
     * @param url    請求的 URL
     * @param params 表單參數(shù)
     * @return 響應結果字符串
     * @throws IOException 網(wǎng)絡請求異常
     */
    public static String sendPostFormRequest(String url, Map<String, String> params) throws IOException {
        FormBody.Builder formBodyBuilder = new FormBody.Builder();
        if (params != null) {
            for (Map.Entry<String, String> entry : params.entrySet()) {
                formBodyBuilder.add(entry.getKey(), entry.getValue());
            }
        }
        RequestBody formBody = formBodyBuilder.build();

        Request request = new Request.Builder()
               .url(url)
               .post(formBody)
               .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful() && response.body() != null) {
                return response.body().string();
            }
            return null;
        }
    }
}

使用示例

以下是如何在 Spring Boot 的 Controller 中使用這個工具類:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/http")
public class HttpController {

    @GetMapping("/get")
    public String getRequest() throws IOException {
        String url = "https://jsonplaceholder.typicode.com/todos/1";
        return OkHttpUtils.sendGetRequest(url);
    }

    @GetMapping("/getWithParams")
    public String getRequestWithParams() throws IOException {
        String url = "https://jsonplaceholder.typicode.com/posts";
        Map<String, String> params = new HashMap<>();
        params.put("userId", "1");
        return OkHttpUtils.sendGetRequest(url, params);
    }

    @GetMapping("/postJson")
    public String postJsonRequest() throws IOException {
        String url = "https://jsonplaceholder.typicode.com/posts";
        String jsonBody = "{\"title\":\"foo\",\"body\":\"bar\",\"userId\":1}";
        return OkHttpUtils.sendPostRequest(url, jsonBody);
    }

    @GetMapping("/postForm")
    public String postFormRequest() throws IOException {
        String url = "https://jsonplaceholder.typicode.com/posts";
        Map<String, String> params = new HashMap<>();
        params.put("title", "foo");
        params.put("body", "bar");
        params.put("userId", "1");
        return OkHttpUtils.sendPostFormRequest(url, params);
    }
}

注意事項

  • 此工具類中的 OkHttpClient 是靜態(tài)初始化的,在整個應用程序中共享一個實例,以提高性能和復用連接。
  • 對于異常處理,當前示例只是簡單地將 IOException 拋出,在實際應用中,你可能需要根據(jù)具體情況進行更詳細的異常處理,例如記錄日志、返回合適的錯誤信息等。
  • 確保在使用時處理好可能的網(wǎng)絡異常和超時情況,以保證應用程序的健壯性。

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java繪制迷宮動畫并顯示的示例代碼

    Java繪制迷宮動畫并顯示的示例代碼

    這篇文章主要為大家詳細介紹了如何利用Java語言實現(xiàn)繪制迷宮動畫并顯示,文中的示例代碼講解詳細,對我們學習Java有一定幫助,需要的可以參考一下
    2022-08-08
  • Java實現(xiàn)簡單的分頁功能

    Java實現(xiàn)簡單的分頁功能

    這篇文章主要為大家詳細介紹了Java實現(xiàn)簡單的分頁功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 基于Mybatis plus 自動代碼生成器的實現(xiàn)代碼

    基于Mybatis plus 自動代碼生成器的實現(xiàn)代碼

    本文通過實例代碼給大家介紹了基于Mybatis-plus 自動代碼生成器的相關知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-05-05
  • java對象轉(zhuǎn)型實例分析

    java對象轉(zhuǎn)型實例分析

    這篇文章主要介紹了java對象轉(zhuǎn)型的概念及用法,并以實例形式進行了較為詳細的介紹,需要的朋友可以參考下
    2014-10-10
  • Kotlin傳遞可變長參數(shù)給Java可變參數(shù)實例代碼

    Kotlin傳遞可變長參數(shù)給Java可變參數(shù)實例代碼

    這篇文章主要介紹了Kotlin傳遞可變長參數(shù)給Java可變參數(shù)實例代碼,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • logback 配置詳解(推薦)

    logback 配置詳解(推薦)

    這篇文章主要介紹了logback 配置詳解(推薦),詳細的介紹了logback的組成使用和配置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Java+Swing實現(xiàn)醫(yī)院管理系統(tǒng)的完整代碼

    Java+Swing實現(xiàn)醫(yī)院管理系統(tǒng)的完整代碼

    這篇文章主要介紹了Java+Swing實現(xiàn)醫(yī)院管理系統(tǒng)的完整代碼,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • postgresql 實現(xiàn)16進制字符串轉(zhuǎn)10進制數(shù)字

    postgresql 實現(xiàn)16進制字符串轉(zhuǎn)10進制數(shù)字

    這篇文章主要介紹了postgresql 實現(xiàn)16進制字符串轉(zhuǎn)10進制數(shù)字操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • dubbo服務整合zipkin詳解

    dubbo服務整合zipkin詳解

    這篇文章主要介紹了dubbo服務整合zipkin,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • mybatis3中@SelectProvider傳遞參數(shù)方式

    mybatis3中@SelectProvider傳遞參數(shù)方式

    這篇文章主要介紹了mybatis3中@SelectProvider傳遞參數(shù)方式。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評論