最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot okhtt工具類封裝方式

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

SpringBoot okhtt工具類封裝

在 Spring Boot 項(xiàng)目中使用 OkHttp 可以方便地進(jìn)行 HTTP 請(qǐng)求。

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

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

以下是一個(gè)封裝了常見(jiàn) HTTP 請(qǐng)求方法(GET、POST)的 OkHttp 工具類示例

import okhttp3.*;

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

/**
 * OkHttp 工具類,封裝常見(jiàn)的 HTTP 請(qǐng)求方法
 */
public class OkHttpUtils {

    private static final OkHttpClient client;

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

    /**
     * 發(fā)送 GET 請(qǐng)求
     *
     * @param url 請(qǐng)求的 URL
     * @return 響應(yīng)結(jié)果字符串
     * @throws IOException 網(wǎng)絡(luò)請(qǐ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 請(qǐng)求
     *
     * @param url    請(qǐng)求的 URL
     * @param params 請(qǐng)求參數(shù)
     * @return 響應(yīng)結(jié)果字符串
     * @throws IOException 網(wǎng)絡(luò)請(qǐ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 請(qǐng)求,請(qǐng)求體為 JSON 格式
     *
     * @param url      請(qǐng)求的 URL
     * @param jsonBody JSON 格式的請(qǐng)求體
     * @return 響應(yīng)結(jié)果字符串
     * @throws IOException 網(wǎng)絡(luò)請(qǐ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 請(qǐng)求,請(qǐng)求體為表單格式
     *
     * @param url    請(qǐng)求的 URL
     * @param params 表單參數(shù)
     * @return 響應(yīng)結(jié)果字符串
     * @throws IOException 網(wǎng)絡(luò)請(qǐ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 中使用這個(gè)工具類:

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);
    }
}

注意事項(xiàng)

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

總結(jié)

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

相關(guān)文章

  • java數(shù)組復(fù)制的四種方法效率對(duì)比

    java數(shù)組復(fù)制的四種方法效率對(duì)比

    這篇文章主要介紹了java數(shù)組復(fù)制的四種方法效率對(duì)比,文中有簡(jiǎn)單的代碼示例,以及效率的比較結(jié)果,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Java異?;A(chǔ)知識(shí)解析

    Java異?;A(chǔ)知識(shí)解析

    這篇文章主要介紹了Java異常基礎(chǔ)知識(shí)解析,具有一定借鑒價(jià)值,需要的朋友可以資參考下。
    2017-12-12
  • java垃圾回收之實(shí)現(xiàn)并行GC算法

    java垃圾回收之實(shí)現(xiàn)并行GC算法

    這篇文章主要為大家介紹了java垃圾回收之實(shí)現(xiàn)并行GC算法的詳細(xì)講解,讓我們看看并行垃圾收集器的GC日志長(zhǎng)什么樣,?從中我們可以得到哪些有用信息
    2022-01-01
  • 用Java設(shè)計(jì)模式中的觀察者模式開(kāi)發(fā)微信公眾號(hào)的例子

    用Java設(shè)計(jì)模式中的觀察者模式開(kāi)發(fā)微信公眾號(hào)的例子

    這篇文章主要介紹了用Java設(shè)計(jì)模式中的觀察者模式開(kāi)發(fā)微信公眾號(hào)的例子,這里Java的微信SDK等部分便不再詳述,只注重關(guān)鍵部分和開(kāi)發(fā)過(guò)程中觀察者模式優(yōu)點(diǎn)的體現(xiàn),需要的朋友可以參考下
    2016-02-02
  • seata springcloud整合教程與遇到的坑

    seata springcloud整合教程與遇到的坑

    seata 是alibaba 出的一款分布式事務(wù)管理器,他有侵入性小,實(shí)現(xiàn)簡(jiǎn)單等特點(diǎn)。這篇文章主要介紹了seata springcloud整合教程與遇到的坑,需要的朋友可以參考下
    2021-07-07
  • Flink開(kāi)發(fā)IDEA環(huán)境搭建與測(cè)試的方法

    Flink開(kāi)發(fā)IDEA環(huán)境搭建與測(cè)試的方法

    這篇文章主要介紹了Flink開(kāi)發(fā)IDEA環(huán)境搭建與測(cè)試的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • spring消息轉(zhuǎn)換器使用詳解

    spring消息轉(zhuǎn)換器使用詳解

    這篇文章主要為大家詳細(xì)介紹了spring消息轉(zhuǎn)換器的使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • springboot中手動(dòng)提交事務(wù)的實(shí)現(xiàn)方法

    springboot中手動(dòng)提交事務(wù)的實(shí)現(xiàn)方法

    手動(dòng)提交事務(wù)可以提供更靈活的控制,以便在分布式環(huán)境中處理事務(wù)的提交和回滾,本文就來(lái)介紹一下springboot中手動(dòng)提交事務(wù)的實(shí)現(xiàn)方法,感興趣的可以了解一下
    2024-01-01
  • Java數(shù)據(jù)結(jié)構(gòu)之選擇排序算法的實(shí)現(xiàn)與優(yōu)化

    Java數(shù)據(jù)結(jié)構(gòu)之選擇排序算法的實(shí)現(xiàn)與優(yōu)化

    選擇排序:(Selection?sort)是一種簡(jiǎn)單直觀的排序算法,也是一種不穩(wěn)定的排序方法。本文主要為大家介紹一下選擇排序的實(shí)現(xiàn)與優(yōu)化,希望對(duì)大家有所幫助
    2023-01-01
  • Java中的@SneakyThrows注解詳解

    Java中的@SneakyThrows注解詳解

    這篇文章主要介紹了Java中的@SneakyThrows注解詳解,@SneakyThrows將當(dāng)前方法拋出的異常,包裝成RuntimeException,騙過(guò)編譯器,使得調(diào)用點(diǎn)可以不用顯示處理異常信息,需要的朋友可以參考下
    2023-10-10

最新評(píng)論

岚皋县| 铜鼓县| 河池市| 琼海市| 沁水县| 大田县| 固始县| 手游| 榕江县| 景宁| 平原县| 疏附县| 武穴市| 合阳县| 赞皇县| 花莲县| 濮阳市| 隆德县| 大田县| 汾西县| 科技| 基隆市| 舞阳县| 锦州市| 信丰县| 大城县| 读书| 阳泉市| 开江县| 濮阳县| 宜兰县| 卫辉市| 盐池县| 怀化市| 赞皇县| 江陵县| 陵水| 长白| 嵊泗县| 黎平县| 诏安县|