国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【微服務(wù)|SpringBoot 3.0】 新特性——內(nèi)置聲明式HTTP客戶端

這篇具有很好參考價(jià)值的文章主要介紹了【微服務(wù)|SpringBoot 3.0】 新特性——內(nèi)置聲明式HTTP客戶端。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言

從Spring 6和Spring Boot 3開(kāi)始,Spring framework支持將遠(yuǎn)程HTTP服務(wù)代理為帶有HTTP交換注解方法的Java接口。類似的庫(kù),如OpenFeign和Retrofit,仍然可以使用,但HttpServiceProxyFactory添加了對(duì)Spring框架的原生支持。

【微服務(wù)|SpringBoot 3.0】 新特性——內(nèi)置聲明式HTTP客戶端,Java全棧編程實(shí)戰(zhàn),微服務(wù),spring boot,http,原力計(jì)劃

聲明式HTTP接口

聲明式 http 客戶端主旨是使得編寫 java http 客戶端更容易。為了貫徹這個(gè)理念,采用了通過(guò)處理注解來(lái)自動(dòng)生成請(qǐng)求的方式(官方稱呼為聲明式、模板化)。通過(guò)聲明式 http 客戶端實(shí)現(xiàn)我們就可以在 java 中像調(diào)用一個(gè)本地方法一樣完成一次 http 請(qǐng)求,大大減少了編碼成本,同時(shí)提高了代碼可讀性。

舉個(gè)例子,如果想調(diào)用 /tenants 的接口,只需要定義如下的接口類即可

public interface TenantClient {

  @GetExchange("/tenants")
  Flux<User> getAll();
}

Spring 會(huì)在運(yùn)行時(shí)提供接口的調(diào)用的具體實(shí)現(xiàn),如上請(qǐng)求我們可以如 Java 方法一樣調(diào)用

@Autowired
TenantClient tenantClient;

tenantClient.getAll().subscribe(

);

如果我們想使用HTTP GET /users API,那么我們可以簡(jiǎn)單地編寫:

public interface UserClient {
  @GetExchange("/users")
  Flux<User> getAll();
}

Spring會(huì)在運(yùn)行時(shí)提供接口和exchange實(shí)現(xiàn),我們只需要調(diào)用getAll()方法。

@Autowired
UserClient userClient;
userClient.getAll().subscribe(
    data -> log.info("User: {}", data)
);

測(cè)試使用

1. Maven

聲明式HTTP接口功能是spring-web依賴的一部分,當(dāng)我們引入spring-boot-starter-web或spring-boot-starter-webflux時(shí),它就會(huì)被傳遞引入。如果我們想添加響應(yīng)式支持,那么就包括后面的依賴。

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

<!-- For reactive support -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

【微服務(wù)|SpringBoot 3.0】 新特性——內(nèi)置聲明式HTTP客戶端,Java全棧編程實(shí)戰(zhàn),微服務(wù),spring boot,http,原力計(jì)劃

2.創(chuàng)建HTTP服務(wù)接口

在Spring中,HTTP服務(wù)接口是一個(gè)帶有@HttpExchange方法的Java接口。帶注釋的方法被視為HTTP端點(diǎn),細(xì)節(jié)通過(guò)注解屬性和輸入法參數(shù)類型靜態(tài)定義。
交流的方法
我們可以使用以下注解將方法標(biāo)記為HTTP服務(wù)端點(diǎn):

@HttpExchange:是指定HTTP端點(diǎn)的通用注釋。當(dāng)在接口級(jí)別使用時(shí),它適用于所有方法。
@GetExchange:為HTTP GET請(qǐng)求指定@HttpExchange。
@PostExchange:對(duì)于HTTP POST請(qǐng)求,指定@HttpExchange。
@PutExchange:為HTTP PUT請(qǐng)求指定@HttpExchange。
@DeleteExchange:對(duì)于HTTP DELETE請(qǐng)求,指定@HttpExchange。
@PatchExchange:對(duì)于HTTP Patch請(qǐng)求,指定@HttpExchange。

方法參數(shù)
exchange方法在方法簽名中支持下列方法參數(shù):

URI:設(shè)置請(qǐng)求的URL。
@PathVariable:將請(qǐng)求URL中的值替換為占位符。
@RequestBody:提供請(qǐng)求的主體。
@RequestParam:添加請(qǐng)求參數(shù)。當(dāng)“content-type”設(shè)置為“application/x-www-form-urlencoded”時(shí),請(qǐng)求參數(shù)會(huì)在請(qǐng)求體中編碼。否則,它們將作為URL查詢參數(shù)添加。
@ requesttheader:添加請(qǐng)求頭的名稱和值。
@RequestPart:可用于添加請(qǐng)求部分(表單字段,資源或HttpEntity等)。
@CookieValue:向請(qǐng)求中添加cookie。

示例代碼:

@PutExchange
void update(@PathVariable Long id, @RequestBody User user);

返回值
HTTP exchange方法可以返回如下值:

阻塞或反應(yīng)性(Mono/Flux)。
只有特定的響應(yīng)信息,如狀態(tài)碼和/或響應(yīng)頭。
Void,表示該方法僅被視為execute方法;

對(duì)于阻塞交換方法,我們通常應(yīng)該返回ResponseEntity,而對(duì)于響應(yīng)式方法,我們可以返回Mono/Flux類型。

//阻塞性
@GetExchange("/{id}")
User getById(...);

//Reactive
@GetExchange("/{id}")
Mono<User> getById(...);

3.構(gòu)建HttpServiceProxyFactory

HttpServiceProxyFactory是一個(gè)從HTTP服務(wù)接口創(chuàng)建客戶端代理的工廠。使用它的HttpServiceProxyFactory.builder(client).build()方法來(lái)獲取代理bean的實(shí)例。

import com.fasterxml.jackson.databind.ObjectMapper;
import com.leftso.app.web.UserClient;
import lombok.SneakyThrows;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.reactive.function.client.support.WebClientAdapter;
import org.springframework.web.service.invoker.HttpServiceProxyFactory;

@Configuration
public class WebConfig {
  @Bean
  WebClient webClient(ObjectMapper objectMapper) {
    return WebClient.builder()
        .baseUrl("https://jsonplaceholder.typicode.com/")
        .build();
  }
  @SneakyThrows
  @Bean
  UserClient postClient(WebClient webClient) {
    HttpServiceProxyFactory httpServiceProxyFactory =
        HttpServiceProxyFactory.builder(WebClientAdapter.forClient(webClient))
            .build();
    return httpServiceProxyFactory.createClient(UserClient.class);
  }
}

注意,我們已經(jīng)在WebClient bean中設(shè)置了遠(yuǎn)程API的基礎(chǔ)URL,因此我們只需要在交換方法中使用相對(duì)路徑。

4. HTTP業(yè)務(wù)接口示例

下面是與https://jsonplaceholder.typicode.com/users/端點(diǎn)交互并執(zhí)行各種操作的HTTP接口示例。

import com.leftso.app.model.User;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.service.annotation.DeleteExchange;
import org.springframework.web.service.annotation.GetExchange;
import org.springframework.web.service.annotation.HttpExchange;
import org.springframework.web.service.annotation.PostExchange;
import org.springframework.web.service.annotation.PutExchange;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

@HttpExchange(url = "/users", accept = "application/json", contentType = "application/json")
public interface UserClient {
  @GetExchange("/")
  Flux<User> getAll();

  @GetExchange("/{id}")
  Mono<User> getById(@PathVariable("id") Long id);

  @PostExchange("/")
  Mono<ResponseEntity<Void>> save(@RequestBody User user);

  @PutExchange("/{id}")
  Mono<ResponseEntity<Void>> update(@PathVariable Long id, @RequestBody User user);

  @DeleteExchange("/{id}")
  Mono<ResponseEntity<Void>> delete(@PathVariable Long id);
}

注意,我們創(chuàng)建了一個(gè)User類型的記錄來(lái)保存用戶信息。

public record User(Long id, String name, String username, String email) {}

現(xiàn)在我們可以將UserClient bean注入到應(yīng)用程序類中,并調(diào)用方法以獲取API響應(yīng)。

@Autowired
UserClient userClient;
//獲取所有用戶
userClient.getAll().subscribe(
    data -> log.info("User: {}", data)
);
//通過(guò)id獲取用戶
userClient.getById(1L).subscribe(
    data -> log.info("User: {}", data)
);
//創(chuàng)建一個(gè)新用戶
userClient.save(new User(null, "Lokesh", "lokesh", "admin@email.com"))
    .subscribe(
        data -> log.info("User: {}", data)
    );
//通過(guò)id刪除用戶
userClient.delete(1L).subscribe(
    data -> log.info("User: {}", data)
);

總結(jié)

在這個(gè)Spring(Spring Boot 3.0)教程中,我們通過(guò)示例學(xué)習(xí)了如何創(chuàng)建和使用聲明式HTTP客戶端接口。

Spring Boot3.0王炸版本帶來(lái)了很多新特性,值得我們深入學(xué)習(xí)

推薦給大家嗶站上動(dòng)力節(jié)點(diǎn)王媽媽的springboot3教程,采用知識(shí)點(diǎn)配合項(xiàng)目案例的方式,可以讓大家很輕松的掌握SpringBoot

配套資料也非常全面,領(lǐng)取方式可看視頻簡(jiǎn)介區(qū)~

點(diǎn)擊這里開(kāi)始 快速學(xué)習(xí)


【微服務(wù)|SpringBoot 3.0】 新特性——內(nèi)置聲明式HTTP客戶端,Java全棧編程實(shí)戰(zhàn),微服務(wù),spring boot,http,原力計(jì)劃文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-594465.html

到了這里,關(guān)于【微服務(wù)|SpringBoot 3.0】 新特性——內(nèi)置聲明式HTTP客戶端的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Forest聲明式HTTP客戶端框架漫談

    Forest 是一款聲明式的 Java 開(kāi)源 HTTP 框架,相比它的前輩 Httpclient 和 OkHttp 更簡(jiǎn)明易懂、也更容易維護(hù),使用過(guò)程中非常絲滑故想分享給更多的朋友,此處我們進(jìn)行簡(jiǎn)單的介紹和使用說(shuō)明。 Forest為聲明式HTTP客戶端框架。將繁復(fù)的 HTTP 請(qǐng)求細(xì)節(jié)封裝成 Java 接口 + 注解的形式,不

    2024年02月09日
    瀏覽(24)
  • Apache IoTDB v1.3.0 發(fā)布|增加客戶端服務(wù)器 SSL 通訊加密、寫入負(fù)數(shù)時(shí)間戳等功能...

    Apache IoTDB v1.3.0 發(fā)布|增加客戶端服務(wù)器 SSL 通訊加密、寫入負(fù)數(shù)時(shí)間戳等功能...

    Release Announcement ? Version 1.3.0?? Apache IoTDB v1.3.0 已經(jīng)發(fā)布,主要新增 SSL 通訊加密、數(shù)據(jù)同步監(jiān)控項(xiàng)統(tǒng)計(jì)等新特性,優(yōu)化了原有權(quán)限模塊的語(yǔ)法和邏輯、metrics 算法庫(kù)性能、Python 客戶端寫入性能以及在部分查詢場(chǎng)景下的查詢效率,修復(fù)部分產(chǎn)品 bug 和性能問(wèn)題。 歡迎在我們的網(wǎng)

    2024年01月17日
    瀏覽(48)
  • SOAP學(xué)習(xí)之一:Visual C++創(chuàng)建簡(jiǎn)單的客戶端--使用soap toolkit 3.0獲取UTC服務(wù)器時(shí)間

    初始接觸 XML及SOAP第一天,摸不著頭緒,看了很多文章,總結(jié)一下幾點(diǎn)心得,附一個(gè)小例子使用VC++控制臺(tái)程序獲取UTC服務(wù)器時(shí)間。 看到的資料VC++都是使用soap toolkit來(lái)使用SOAP,soap toolkit目前看最高版本應(yīng)該是3.0,但是微軟已經(jīng)不再對(duì)soap toolkit提供技術(shù)支持及更新,在微軟官網(wǎng)

    2024年02月09日
    瀏覽(22)
  • 微服務(wù)——http客戶端Feign

    微服務(wù)——http客戶端Feign

    目錄 Restemplate方式調(diào)用存在的問(wèn)題 Feign的介紹 基于Feign遠(yuǎn)程調(diào)用 Feign自定義配置 修改日志方式一(基于配置文件) 修改日志方式二(基于java代碼) Feign的性能優(yōu)化 連接池使用方法? Feign_最佳實(shí)踐分析? ?方式一: 方式二 ?實(shí)現(xiàn)Feign最佳實(shí)踐(方式二) ?兩種解決方案 就像早期的事務(wù)

    2024年02月15日
    瀏覽(44)
  • 微服務(wù)中間件--http客戶端Feign

    微服務(wù)中間件--http客戶端Feign

    以前利用RestTemplate發(fā)起遠(yuǎn)程調(diào)用的代碼: 存在下面的問(wèn)題: 代碼可讀性差,編程體驗(yàn)不統(tǒng)一 參數(shù)復(fù)雜URL難以維護(hù) Feign的介紹 Feign是一個(gè)聲明式的http客戶端, 其作用就是幫助我們優(yōu)雅的實(shí)現(xiàn)http請(qǐng)求的發(fā)送, 解決上面提到的問(wèn)題。 使用Feign的步驟如下: 1.引入依賴: 2.在order-

    2024年02月11日
    瀏覽(26)
  • Nginx HTTP/3服務(wù)器-客戶端環(huán)境搭建

    一、 NGINX 服務(wù)器介紹: NGINX是一個(gè)高性能的開(kāi)源Web服務(wù)器,也可用作反向代理服務(wù)器、負(fù)載均衡器和HTTP緩存。它由俄羅斯的程序員Igor Sysoev創(chuàng)建,并于2004年首次公開(kāi)發(fā)布。NGINX的設(shè)計(jì)重點(diǎn)是高性能、高并發(fā)和低內(nèi)存消耗,使其成為了現(xiàn)代Web架構(gòu)中的關(guān)鍵組件之一。 NGINX的一些

    2024年03月11日
    瀏覽(28)
  • HTTP介紹 原理 消息結(jié)構(gòu) 客戶端請(qǐng)求 服務(wù)器響應(yīng) HTTP狀態(tài)碼

    HTTP介紹 原理 消息結(jié)構(gòu) 客戶端請(qǐng)求 服務(wù)器響應(yīng) HTTP狀態(tài)碼

    HTTP協(xié)議 是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫,是用于萬(wàn)維網(wǎng)(www.world wide web)服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議 HTTP 是基于TCP/IP(三次握手,四次揮手)通信協(xié)議來(lái)傳輸數(shù)據(jù)(HTML文件,圖片文件,查詢結(jié)果等) TCP:可靠的,丟包重傳 UTP:不可靠的,直播,

    2024年02月05日
    瀏覽(28)
  • java代碼構(gòu)建簡(jiǎn)單http服務(wù)器和客戶端

    java代碼構(gòu)建簡(jiǎn)單http服務(wù)器和客戶端

    初識(shí)http a、超文本傳輸 、應(yīng)用層的面向?qū)ο蟮膮f(xié)議,概念介紹網(wǎng)上資源一大堆,關(guān)鍵是基于TCP/IP通信協(xié)議來(lái)傳遞數(shù)據(jù)。 b、一開(kāi)始接觸web項(xiàng)目,都是先接觸的servlet,tomcat服務(wù)器默認(rèn)實(shí)現(xiàn)的一套http規(guī)范,提供了基礎(chǔ)服務(wù)和組件環(huán)境,直接拿到請(qǐng)求、構(gòu)建正文、響應(yīng)客戶端 然而

    2024年02月10日
    瀏覽(28)
  • 使用Go語(yǔ)言的HTTP客戶端和服務(wù)器

    使用Go語(yǔ)言的HTTP客戶端和服務(wù)器

    使用Go語(yǔ)言進(jìn)行HTTP客戶端和服務(wù)器開(kāi)發(fā)是一種高效且強(qiáng)大的方式。Go語(yǔ)言的標(biāo)準(zhǔn)庫(kù)提供了對(duì)HTTP協(xié)議的全面支持,使得創(chuàng)建HTTP客戶端和服務(wù)器變得簡(jiǎn)單。 首先,讓我們來(lái)看一下如何創(chuàng)建一個(gè)簡(jiǎn)單的HTTP服務(wù)器。在Go中,可以使用 net/http 包來(lái)創(chuàng)建HTTP服務(wù)器。以下是一個(gè)簡(jiǎn)單的示例

    2024年01月16日
    瀏覽(47)
  • 使用HTTP/2實(shí)現(xiàn)服務(wù)端主動(dòng)推送消息給客戶端

    使用HTTP/2實(shí)現(xiàn)服務(wù)端主動(dòng)推送消息給客戶端

    77. 使用HTTP/2實(shí)現(xiàn)服務(wù)端主動(dòng)推送消息給客戶端 HTTP/2 協(xié)議的服務(wù)器主動(dòng)推送機(jī)制是通過(guò)服務(wù)器在接收到客戶端請(qǐng)求后,主動(dòng)向客戶端推送相關(guān)資源的方式來(lái)實(shí)現(xiàn)的。下面將詳細(xì)解釋如何在服務(wù)器端和客戶端實(shí)現(xiàn) HTTP/2 的服務(wù)器主動(dòng)推送,并給出相應(yīng)的代碼示例。 客戶端實(shí)現(xiàn):

    2024年02月11日
    瀏覽(31)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包