国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

初學(xué)者必知:Spring Boot 調(diào)用外部接口的三種姿勢

開發(fā)
本文將詳細(xì)介紹 Spring Boot 調(diào)用外部接口的三種方式,幫助初學(xué)者輕松應(yīng)對這一常見的開發(fā)需求,提升開發(fā)技能,為今后的 Java 開發(fā)之路打下堅(jiān)實(shí)的基礎(chǔ)。 SpringBoot

在當(dāng)今數(shù)字化時(shí)代,Java 開發(fā)技術(shù)在軟件開發(fā)領(lǐng)域占據(jù)著重要地位,而 Spring Boot 作為 Java 開發(fā)中備受青睞的框架之一,其簡潔、高效的特點(diǎn)深受開發(fā)者喜愛。對于初學(xué)者來說,掌握 Spring Boot 調(diào)用外部接口的方法是邁向 Java 開發(fā)世界的重要一步。在實(shí)際項(xiàng)目開發(fā)中,我們常常需要與外部系統(tǒng)進(jìn)行數(shù)據(jù)交互,調(diào)用各種外部接口來獲取所需的信息或?qū)崿F(xiàn)特定的功能。

本文將詳細(xì)介紹 Spring Boot 調(diào)用外部接口的三種方式,幫助初學(xué)者輕松應(yīng)對這一常見的開發(fā)需求,提升開發(fā)技能,為今后的 Java 開發(fā)之路打下堅(jiān)實(shí)的基礎(chǔ)。

方式一:使用 RestTemplate 

1. RestTemplate 簡介

RestTemplate 是 Spring 提供的一個(gè)用于訪問 HTTP 服務(wù)的客戶端,它簡化了與 HTTP 服務(wù)的通信,提供了多種便捷的方法來發(fā)送請求和處理響應(yīng)。在 Spring Boot 項(xiàng)目中,我們可以很方便地使用 RestTemplate 來調(diào)用外部接口。

2. 使用步驟

(1) 引入依賴

在 Spring Boot 項(xiàng)目的 pom.xml 文件中,確保已引入 Spring Web 依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

(2) 創(chuàng)建 RestTemplate 實(shí)例

在需要調(diào)用外部接口的類中,創(chuàng)建 RestTemplate 實(shí)例:

import org.springframework.web.client.RestTemplate;

public class MyService {

    private RestTemplate restTemplate = new RestTemplate();

}

(3) 發(fā)送請求并處理響應(yīng)

使用 RestTemplate 提供的方法發(fā)送請求,例如發(fā)送一個(gè) GET 請求:

import org.springframework.web.client.RestTemplate;

public class MyService {

    private RestTemplate restTemplate = new RestTemplate();

    public void callExternalApi() {
        String url = "https://api.example.com/data";
        String response = restTemplate.getForObject(url, String.class);
        System.out.println("Response: " + response);
    }

}

在上述代碼中,getForObject 方法用于發(fā)送 GET 請求,并將響應(yīng)結(jié)果轉(zhuǎn)換為指定的類型(這里為 String 類型)。

3. 配置與優(yōu)化

(1) 設(shè)置超時(shí)時(shí)間

可以通過自定義 RestTemplate 的 ClientHttpRequestFactory 來設(shè)置超時(shí)時(shí)間:

import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

public class MyService {

    public MyService() {
        RestTemplate restTemplate = new RestTemplate();
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
        factory.setConnectTimeout(5000); // 設(shè)置連接超時(shí)時(shí)間為 5000 毫秒
        factory.setReadTimeout(5000); // 設(shè)置讀取超時(shí)時(shí)間為 5000 毫秒
        restTemplate.setRequestFactory(factory);
    }

}

(2) 添加請求頭

如果需要在請求中添加自定義的請求頭,可以使用 HttpHeaders 和 HttpEntity :

import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

publicclass MyService {

    public void callExternalApiWithHeaders() {
        RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        headers.add("Authorization", "Bearer " + "your_token");
        HttpEntity<String> entity = new HttpEntity<>(headers);
        String url = "https://api.example.com/protected-data";
        ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
        System.out.println("Response: " + response.getBody());
    }

}

4. 實(shí)際案例

假設(shè)我們需要調(diào)用一個(gè)天氣查詢接口,獲取指定城市的天氣信息。接口地址為 https://api.weather.com/v3/weather/forecast/daily ,需要傳遞城市參數(shù)和 API 密鑰。以下是使用 RestTemplate 實(shí)現(xiàn)的代碼:

import org.springframework.web.client.RestTemplate;

public class WeatherService {

    private RestTemplate restTemplate = new RestTemplate();

    public void getWeatherForecast(String city) {
        String apiKey = "your_api_key";
        String url = "https://api.weather.com/v3/weather/forecast/daily?q=" + city + "&apiKey=" + apiKey;
        String response = restTemplate.getForObject(url, String.class);
        System.out.println("Weather Forecast: " + response);
    }

}

通過以上代碼,我們可以輕松地調(diào)用天氣查詢接口,獲取指定城市的天氣預(yù)報(bào)信息。

方式二:使用 WebClient 

1. WebClient 簡介

WebClient 是 Spring 5 引入的一個(gè)響應(yīng)式 Web 客戶端,它基于 Project Reactor 實(shí)現(xiàn)了響應(yīng)式編程模型,可以更高效地處理高并發(fā)場景下的 HTTP 請求。與 RestTemplate 不同,WebClient 采用函數(shù)式編程風(fēng)格,提供了更靈活的請求構(gòu)建和響應(yīng)處理方式。

2. 使用步驟

(1) 引入依賴

在 Spring Boot 項(xiàng)目的 pom.xml 文件中,引入 Spring WebFlux 依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

(2) 創(chuàng)建 WebClient 實(shí)例

在需要調(diào)用外部接口的類中,創(chuàng)建 WebClient 實(shí)例:

import org.springframework.web.reactive.function.client.WebClient;

public class MyService {

    private WebClient webClient = WebClient.create();

}

(3) 發(fā)送請求并處理響應(yīng)

使用 WebClient 構(gòu)建請求并處理響應(yīng),例如發(fā)送一個(gè) GET 請求:

import org.springframework.web.reactive.function.client.WebClient;

publicclass MyService {

    private WebClient webClient = WebClient.create();

    public void callExternalApi() {
        String url = "https://api.example.com/data";
        webClient.get()
            .uri(url)
            .retrieve()
            .bodyToMono(String.class)
            .subscribe(response -> System.out.println("Response: " + response));
    }

}

在上述代碼中,get 方法用于指定請求方法為 GET,uri 方法用于設(shè)置請求的 URI,retrieve 方法用于發(fā)送請求并獲取響應(yīng),bodyToMono 方法用于將響應(yīng)體轉(zhuǎn)換為指定的類型(這里為 String 類型),subscribe 方法用于訂閱響應(yīng)并處理結(jié)果。

3. 高級用法

(1) 請求體的構(gòu)建

如果需要發(fā)送 POST 請求并傳遞請求體,可以使用 bodyValue 方法:

import org.springframework.web.reactive.function.client.WebClient;

publicclass MyService {

    private WebClient webClient = WebClient.create();

    public void callExternalApiWithBody() {
        String url = "https://api.example.com/data";
        MyRequestData requestData = new MyRequestData("value1", "value2");
        webClient.post()
            .uri(url)
            .bodyValue(requestData)
            .retrieve()
            .bodyToMono(String.class)
            .subscribe(response -> System.out.println("Response: " + response));
    }

    publicstaticclass MyRequestData {
        private String field1;
        private String field2;

        public MyRequestData(String field1, String field2) {
            this.field1 = field1;
            this.field2 = field2;
        }

        // getter 和 setter 方法
    }

}

(2) 響應(yīng)數(shù)據(jù)的流式處理

對于大文件或大數(shù)據(jù)量的響應(yīng),可以使用 bodyToFlux 方法進(jìn)行流式處理:

import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Flux;

publicclass MyService {

    private WebClient webClient = WebClient.create();

    public void callExternalApiWithStream() {
        String url = "https://api.example.com/large-data";
        webClient.get()
            .uri(url)
            .retrieve()
            .bodyToFlux(String.class)
            .subscribe(data -> System.out.println("Processing data: " + data));
    }

}

4. 實(shí)際案例

假設(shè)我們需要調(diào)用一個(gè)用戶信息查詢接口,根據(jù)用戶 ID 獲取用戶詳細(xì)信息。接口地址為 https://api.user.com/v1/users/{id} ,需要傳遞用戶 ID 參數(shù)。以下是使用 WebClient 實(shí)現(xiàn)的代碼:

import org.springframework.web.reactive.function.client.WebClient;

publicclass UserService {

    private WebClient webClient = WebClient.create();

    public void getUserInfo(String userId) {
        String url = "https://api.user.com/v1/users/" + userId;
        webClient.get()
            .uri(url)
            .retrieve()
            .bodyToMono(String.class)
            .subscribe(response -> System.out.println("User Info: " + response));
    }

}

通過以上代碼,我們可以使用 WebClient 調(diào)用用戶信息查詢接口,獲取指定用戶的信息。

方式三:使用 HttpClient 

1. HttpClient 簡介

HttpClient 是 Apache HttpComponents 項(xiàng)目中的一個(gè)組件,它是一個(gè)功能強(qiáng)大的 HTTP 客戶端庫,可以用于發(fā)送 HTTP 請求和接收響應(yīng)。在 Spring Boot 項(xiàng)目中,我們可以集成 HttpClient 來調(diào)用外部接口,它具有高度的靈活性和可定制性。

2. 使用步驟

(1) 引入依賴

在 Spring Boot 項(xiàng)目的 pom.xml 文件中,引入 HttpClient 依賴:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>

(2) 創(chuàng)建 HttpClient 實(shí)例

在需要調(diào)用外部接口的類中,創(chuàng)建 HttpClient 實(shí)例:

import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

public class MyService {

    private CloseableHttpClient httpClient = HttpClients.createDefault();

}

(3) 發(fā)送請求并處理響應(yīng)

使用 HttpClient 發(fā)送請求并處理響應(yīng),例如發(fā)送一個(gè) GET 請求:

import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

publicclass MyService {

    private CloseableHttpClient httpClient = HttpClients.createDefault();

    public void callExternalApi() {
        String url = "https://api.example.com/data";
        HttpGet httpGet = new HttpGet(url);
        try {
            CloseableHttpResponse response = httpClient.execute(httpGet);
            String responseBody = EntityUtils.toString(response.getEntity());
            System.out.println("Response: " + responseBody);
            response.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

在上述代碼中,HttpGet 類用于創(chuàng)建 GET 請求,httpClient.execute 方法用于發(fā)送請求并獲取響應(yīng),EntityUtils.toString 方法用于將響應(yīng)實(shí)體轉(zhuǎn)換為字符串。

3. 配置與優(yōu)化

(1) 連接管理

可以通過自定義 HttpHost 和 HttpConnectionConfig 來管理連接:

import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;

publicclass MyService {

    public MyService() {
        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
        connectionManager.setMaxTotal(100); // 設(shè)置最大連接數(shù)
        connectionManager.setDefaultMaxPerRoute(20); // 設(shè)置每個(gè)路由的最大連接數(shù)
        CloseableHttpClient httpClient = HttpClients.custom()
            .setConnectionManager(connectionManager)
            .build();
    }

}

(2) 請求配置

可以使用 RequestConfig 來設(shè)置請求的超時(shí)時(shí)間、重試次數(shù)等參數(shù):

import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

publicclass MyService {

    private CloseableHttpClient httpClient = HttpClients.createDefault();

    public void callExternalApiWithConfig() {
        String url = "https://api.example.com/data";
        RequestConfig requestConfig = RequestConfig.custom()
            .setConnectTimeout(5000) // 設(shè)置連接超時(shí)時(shí)間為 5000 毫秒
            .setSocketTimeout(5000) // 設(shè)置讀取超時(shí)時(shí)間為 5000 毫秒
            .build();
        HttpGet httpGet = new HttpGet(url);
        httpGet.setConfig(requestConfig);
        try {
            CloseableHttpResponse response = httpClient.execute(httpGet);
            String responseBody = EntityUtils.toString(response.getEntity());
            System.out.println("Response: " + responseBody);
            response.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

4. 實(shí)際案例

假設(shè)我們需要調(diào)用一個(gè)訂單查詢接口,獲取指定訂單的詳細(xì)信息。接口地址為 https://api.order.com/v1/orders/{id} ,需要傳遞訂單 ID 參數(shù)。以下是使用 HttpClient 實(shí)現(xiàn)的代碼:

import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

publicclass OrderService {

    private CloseableHttpClient httpClient = HttpClients.createDefault();

    public void getOrderInfo(String orderId) {
        String url = "https://api.order.com/v1/orders/" + orderId;
        HttpGet httpGet = new HttpGet(url);
        try {
            CloseableHttpResponse response = httpClient.execute(httpGet);
            String responseBody = EntityUtils.toString(response.getEntity());
            System.out.println("Order Info: " + responseBody);
            response.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

通過以上代碼,我們可以使用 HttpClient 調(diào)用訂單查詢接口,獲取指定訂單的信息。

三種方式的對比與選擇

特性

RestTemplate

WebClient

HttpClient

編程模型

阻塞式

響應(yīng)式

阻塞式

性能

一般

易用性

功能特性

豐富

更豐富

非常豐富

適用場景

一般場景

高并發(fā)場景

需要高度定制化的場景

根據(jù)不同的業(yè)務(wù)場景和需求,可以選擇合適的調(diào)用方式。如果項(xiàng)目中已經(jīng)使用了 Spring Web 且對性能要求不高,可以選擇 RestTemplate;如果需要處理高并發(fā)場景且對響應(yīng)式編程有一定了解,可以選擇 WebClient;如果需要高度定制化的請求和響應(yīng)處理,可以選擇 HttpClient。

責(zé)任編輯:趙寧寧 來源: Java技術(shù)營地
相關(guān)推薦

2011-05-18 11:01:39

Oracle

2011-07-05 13:59:23

XML

2010-12-14 09:22:27

HTML 5

2015-04-24 13:00:33

2025-01-06 12:00:00

Python函數(shù)內(nèi)置函數(shù)

2015-03-23 17:18:18

Java字符串問題

2011-03-17 13:29:20

2025-02-26 13:00:00

SpringBootJava開發(fā)

2022-10-19 23:18:27

KubernetesPod錯(cuò)誤

2011-04-12 10:13:24

2022-04-24 15:21:01

MarkdownHTML

2011-09-16 09:38:19

Emacs

2020-08-25 10:14:59

JavaScript開發(fā) 技巧

2009-12-08 09:45:50

調(diào)用WCF

2025-02-26 15:51:31

SpringBootPDFWord

2011-07-11 17:45:13

java

2024-10-18 08:00:00

SpringBoot框架開發(fā)

2015-07-20 13:56:59

SDN

2022-10-10 15:28:45

負(fù)載均衡

2011-07-04 14:14:54

java
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

91精品综合久久久久久五月天| 九九视频直播综合网| 亚洲一区三区电影在线观看| 亚洲国产91视频| 亚洲.国产.中文慕字在线| 亚洲一区二区免费| 国产一区一区| 日韩欧美一区二区不卡| 高清色视频在线观看| 国产激情偷乱视频一区二区三区| 91亚洲一区精品| 国内精品麻豆美女在线播放视频 | 欧美精品一区二区在线观看| 久久久亚洲精华液精华液精华液| 懂色av一区二区三区免费看| 欧美自拍资源在线| 欧美福利影院| 亚洲综合色激情五月| 色综合久久网| 国产精品尤物福利片在线观看| 日本免费精品| 久久久久久久一区二区| 日本a人精品| 欧美成人合集magnet| 亚洲国产91视频| 欧美高清激情视频| 日韩黄色网络| 国产欧美日韩精品专区| 韩日在线一区| 奇米影视首页 狠狠色丁香婷婷久久综合 | 狠狠色狠狠色综合日日小说| 成人免费看黄网址| 欧美国产禁国产网站cc| 九色丨porny丨| 亚洲国产一区在线观看| 黄网站免费在线观看| 日韩av有码在线| 日本一区二区三区视频在线看| 97国产在线视频| 久久久久午夜电影| 天堂精品一区二区三区| 99麻豆久久久国产精品免费优播| 午夜视频在线观看韩国| 国产欧美视频一区二区三区| 国产小视频在线播放| 无人区乱码一区二区三区| 成人欧美一区二区三区黑人麻豆| 日韩手机在线观看视频| 久久午夜国产精品| 中国国产一级毛片| 欧美一级日韩免费不卡| 电影一区二区三区| 欧美第一黄色网| 一区二区三区在线| 青青草成人免费在线视频| 亚洲欧洲国产专区| 国产黄色免费在线观看| 俺也去精品视频在线观看| 99久久久久| 久久免费一级片| 性做久久久久久| 美女91在线看| 国产精品夜间视频香蕉| 国产成人免费在线观看不卡| 天天色综合天天色| 欧美成人综合网站| av小次郎在线| 91精品国产综合久久香蕉最新版| 国产麻豆视频精品| 国产精品视频一区二区久久| 欧美成人免费全部观看天天性色| 中文字幕一区二区三区欧美日韩 | 国产成人av一区二区| 中文字幕欧美一区二区| 欧美寡妇偷汉性猛交| 国产美女主播视频一区| 老司机av在线免费看| 国产精品大陆在线观看| 亚洲欧美综合另类在线卡通| 高清在线一区| 国产二区视频在线播放| 亚洲美女黄色片| 日本中文在线一区| 欧美人与性动交α欧美精品图片| 91亚洲精品一区二区| 91久久国产最好的精华液| 一道本一区二区三区| 开心丁香婷婷深爱五月| 欧美一级黑人aaaaaaa做受| 亚洲三级在线看| 残酷重口调教一区二区| 十九岁完整版在线观看好看云免费| 性欧美长视频免费观看不卡| 国产精品看片你懂得| 亚洲精品国产动漫| 日本国产在线| 欧美激情专区| 欧美激情一区二区久久久| 国产亚洲欧美色| 九九久久婷婷| 精品视频一二三| 无遮挡亚洲一区| 国产一区二区三区在线视频 | 91亚洲国产成人久久精品| 黄网站免费在线播放| 在线精品日韩| 久久久久久久久久久91| 91国产成人在线| 国产·精品毛片| 婷婷丁香激情网| 99在线看视频| 夜夜嗨av色一区二区不卡| 一区二区在线免费| 青青草精品视频| 精品国产中文字幕第一页| 黄网站app在线观看| 高清一区二区视频| 亚洲国产另类久久久精品极度| 日韩中文字幕在线观看| 日本道在线观看一区二区| 国产一区二区三区香蕉| 欧美日韩在线网站| 欧美韩国亚洲| 国内在线精品| 免费高清成人| 欧美色图另类小说| 国产视频在线观看一区| 7777免费精品视频| 亚洲人成77777在线观看网| 欧美久久一二区| 亚洲欧美自拍偷拍| 国产精品资源网站| 日韩成人午夜电影| 精品9999| 婷婷久久综合| 国产中文字幕一区二区三区| 亚洲精品一区国产| 奇米777日韩| mm视频在线视频| av观看在线| 午夜国产福利在线| 在线观看美女网站大全免费| 日本韩国福利视频| 黄页网址大全在线播放| 先锋影音资源999| 中文字幕在线综合| 欧美精品一区二区三区免费播放| 丰满人妻一区二区三区53号| 久久久久亚洲av无码专区喷水| 三区精品视频| 亚洲砖区区免费| 吴梦梦av在线| 免费看国产曰批40分钟| 91成人在线观看喷潮教学| 精品视频无码一区二区三区| 成人羞羞视频免费看看| 夜色福利资源站www国产在线视频| h精品动漫在线观看| 视频一区二区在线播放| 嗯~啊~轻一点视频日本在线观看| 国产自产自拍视频在线观看| 一级欧美视频| 精品国产一级毛片| 国产精品女主播一区二区三区| 国产精品五区| 99久久综合国产精品| 国产精品国产a级| 91福利国产成人精品照片| 亚洲精品国产福利| 欧美精品午夜视频| 91精品国产综合久久久久久丝袜| 亚洲色图自拍| 独立日3在线观看完整版| 毛片在线播放a| av在线精品| 欧美精品啪啪| 国产精品极品在线观看| 久久精品国产在热久久| 亚洲精品国产精品自产a区红杏吧| 精品国产乱码一区二区三区四区| 青青九九免费视频在线| 新狼窝色av性久久久久久| 亚洲白拍色综合图区| 欧美 日韩 国产 在线观看| 成人噜噜噜噜| 国产精品免费久久| 欧美精品videosex极品1| 日韩精品一区中文字幕| 一区二区三区无毛| 中文字幕精品一区二区三区精品| xxxxx91麻豆| 热久久精品国产| 精品国产123区| 在线观看亚洲专区| 国产精品成人一区二区三区| 欧美爱爱视频网站| 成人性生交大片免费网站| 国产自产v一区二区三区c| 亚洲欧美日韩中文视频| 人妻无码一区二区三区四区|