chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

替換OpenFeign,Spring新版本自帶的HTTP客戶端工具來(lái)了!

jf_ro2CN3Fa ? 來(lái)源:Java知音 ? 2023-01-05 09:59 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


我們?cè)谌粘i_(kāi)發(fā)中,經(jīng)常會(huì)需要遠(yuǎn)程調(diào)用其他服務(wù)提供的接口,比較常用的 HTTP 遠(yuǎn)程代理框架有OpenFeign、Retrofit以及一些第三方封裝工具類(lèi),例如Hutool提供的HttpUtil。

11月24日,Spring Boot 3正式發(fā)布,Spring官方已經(jīng)自身支持使用聲明式服務(wù)調(diào)用的方式來(lái)調(diào)用遠(yuǎn)程接口。

7be31692-8c63-11ed-bfe3-dac502259ad0.png

雖然類(lèi)似的遠(yuǎn)程調(diào)用框架如OpenFeign和Retrofit仍然可以使用,但HttpServiceProxyFactory增加了對(duì) Spring 框架的原生支持。如果Spring本身可以做到遠(yuǎn)程調(diào)用的話,這些大量的第三方庫(kù)應(yīng)該很快會(huì)被原生方法取代,我們今天來(lái)了解一下這個(gè)新特征。

聲明式 Http 接口

聲明性 HTTP 接口可以讓你像定義Java接口那樣定義HTTP服務(wù),用法和你平時(shí)寫(xiě)Controller中方法完全一致。

引入

聲明性 HTTP 接口功能是spring-web依賴項(xiàng)的一部分,使用前必須引入如下依賴包:

<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>

<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webfluxartifactId>
dependency>

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

在 Spring 中,HTTP 服務(wù)接口是一個(gè)帶有@HttpExchange方法的 Java 接口。注釋方法被視為 HTTP 端點(diǎn),細(xì)節(jié)通過(guò)注釋屬性和輸入方法參數(shù)類(lèi)型靜態(tài)定義。

支持的注解類(lèi)型

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

方法參數(shù)

7bf13cb8-8c63-11ed-bfe3-dac502259ad0.png

返回值

聲明性 HTTP 接口支持以下返回值:

7bfbfcca-8c63-11ed-bfe3-dac502259ad0.png

使用示例

@PutExchange
voidupdate(@PathVariableLongid,@RequestBodyUseruser);

完整使用案例

我們以一個(gè)簡(jiǎn)單的用戶信息請(qǐng)求為例

0、構(gòu)建HttpServiceProxyFactory

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

importcom.fasterxml.jackson.databind.ObjectMapper;
importcom.howtodoinjava.app.web.UserClient;
importlombok.SneakyThrows;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
importorg.springframework.web.reactive.function.client.WebClient;
importorg.springframework.web.reactive.function.client.support.WebClientAdapter;
importorg.springframework.web.service.invoker.HttpServiceProxyFactory;
@Configuration
publicclassWebConfig{
@Bean
WebClientwebClient(ObjectMapperobjectMapper){
returnWebClient.builder()
.baseUrl("https://jsonplaceholder.typicode.com/")
.build();
}
@SneakyThrows
@Bean
UserClientpostClient(WebClientwebClient){
HttpServiceProxyFactoryhttpServiceProxyFactory=
HttpServiceProxyFactory.builder(WebClientAdapter.forClient(webClient))
.build();
returnhttpServiceProxyFactory.createClient(UserClient.class);
}
}

1、定義一個(gè)簡(jiǎn)單的用戶信息實(shí)體類(lèi):

publicclassUser{

privateintid;

privateStringusername;

privateStringpassword;

//省略

}

2、請(qǐng)求接口:

importcom.howtodoinjava.app.model.User;
importorg.springframework.http.ResponseEntity;
importorg.springframework.web.bind.annotation.PathVariable;
importorg.springframework.web.bind.annotation.RequestBody;
importorg.springframework.web.service.annotation.DeleteExchange;
importorg.springframework.web.service.annotation.GetExchange;
importorg.springframework.web.service.annotation.HttpExchange;
importorg.springframework.web.service.annotation.PostExchange;
importorg.springframework.web.service.annotation.PutExchange;
importreactor.core.publisher.Flux;
importreactor.core.publisher.Mono;
@HttpExchange(url="/users",accept="application/json",contentType="application/json")
publicinterfaceUserClient{
@GetExchange("/")
FluxgetAll();
@GetExchange("/{id}")
MonogetById(@PathVariable("id")Longid);
@PostExchange("/")
Mono>save(@RequestBodyUseruser);
@PutExchange("/{id}")
Mono>update(@PathVariableLongid,@RequestBodyUseruser);
@DeleteExchange("/{id}")
Mono>delete(@PathVariableLongid);
}

3、將UserClient bean 注入應(yīng)用程序類(lèi)并調(diào)用方法來(lái)獲取 API 響應(yīng):

@Autowired
UserClientuserClient;
//GetAllUsers
userClient.getAll().subscribe(
data->log.info("User:{}",data)
);
//GetUserById
userClient.getById(1L).subscribe(
data->log.info("User:{}",data)
);
//CreateaNewUser
userClient.save(newUser(null,"Lokesh","lokesh","admin@email.com"))
.subscribe(
data->log.info("User:{}",data)
);
//DeleteUserById
userClient.delete(1L).subscribe(
data->log.info("User:{}",data)
);

完工,不需要定義方法實(shí)現(xiàn)就能進(jìn)行遠(yuǎn)程HTTP調(diào)用,非常方便!



審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    9296

    瀏覽量

    155590
  • HTTP
    +關(guān)注

    關(guān)注

    0

    文章

    530

    瀏覽量

    34520

原文標(biāo)題:替換OpenFeign,Spring 新版本自帶的 HTTP 客戶端工具來(lái)了!

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    【直播預(yù)告】RT-Trace 全新版本發(fā)布|ITM輸出 MemoryWatch 功能首發(fā)實(shí)測(cè)! | 問(wèn)學(xué)直播

    RT-Trace迎來(lái)又一次重要更新!本次新版本來(lái)了兩項(xiàng)備受期待的功能——ITM輸出與MemoryWatch內(nèi)存監(jiān)控,讓調(diào)試可視化更高效、問(wèn)題定位更精準(zhǔn)。為幫助開(kāi)發(fā)者快速上手新特性
    的頭像 發(fā)表于 10-14 11:57 ?136次閱讀
    【直播預(yù)告】RT-Trace 全<b class='flag-5'>新版本</b>發(fā)布|ITM輸出  MemoryWatch 功能首發(fā)實(shí)測(cè)! | 問(wèn)學(xué)直播

    Python modbus-tk如何獲得客戶端信息?

    Python modbus-tk如何獲得客戶端信息
    發(fā)表于 08-07 06:01

    戴爾數(shù)據(jù)保護(hù)軟件迎來(lái)全新版本

    無(wú)縫運(yùn)行的異常檢測(cè),一站式監(jiān)控多達(dá)150個(gè)系統(tǒng),額外的MFA多重身份驗(yàn)證Dell PowerProtect Data Manager19.19全新版本現(xiàn)已到來(lái)!
    的頭像 發(fā)表于 06-27 13:55 ?580次閱讀

    普華基礎(chǔ)軟件開(kāi)源汽車(chē)操作系統(tǒng)新版本代碼上線

    近日,第二十一屆上海國(guó)際汽車(chē)工業(yè)展覽會(huì)現(xiàn)場(chǎng),開(kāi)源車(chē)用操作系統(tǒng)新版本代碼上線儀式在中國(guó)電科展臺(tái)成功召開(kāi)。全球首個(gè)開(kāi)源智能駕駛操作系統(tǒng)微內(nèi)核龘EasyAda V2.1和首個(gè)規(guī)模化、量產(chǎn)級(jí)安全車(chē)控操作系統(tǒng)
    的頭像 發(fā)表于 04-30 09:17 ?692次閱讀

    普華基礎(chǔ)軟件開(kāi)源車(chē)用操作系統(tǒng)迎來(lái)全新版本

    近日,普華基礎(chǔ)軟件開(kāi)源車(chē)用操作系統(tǒng)媒體發(fā)布會(huì)在上海中國(guó)汽車(chē)會(huì)客廳召開(kāi)——全球首個(gè)開(kāi)源智能駕駛操作系統(tǒng)微內(nèi)核龘EasyAda、開(kāi)源安全車(chē)控操作系統(tǒng)小滿EasyXMen全新版本正式發(fā)布?,F(xiàn)場(chǎng),普華基礎(chǔ)軟件開(kāi)源項(xiàng)目技術(shù)團(tuán)隊(duì)專(zhuān)家就開(kāi)源項(xiàng)目新版本技術(shù)亮點(diǎn)、新增功能及社區(qū)治理與運(yùn)營(yíng)等
    的頭像 發(fā)表于 04-25 16:18 ?683次閱讀

    網(wǎng)絡(luò)傳輸利器索尼NXL-ME80 V1.2新版本發(fā)布

    網(wǎng)絡(luò)傳輸利器NXL-ME80,憑借著高畫(huà)質(zhì)、高壓縮比、低延時(shí)、高密度輕巧機(jī)箱,高冗余能力,一經(jīng)上市就收到全球客戶的大量好評(píng)。基于用戶反饋和市場(chǎng)需求,NXL-ME80新版本V1.2強(qiáng)勢(shì)來(lái)襲,必將為使用者帶來(lái)更好的體驗(yàn)。
    的頭像 發(fā)表于 04-23 14:37 ?766次閱讀
    網(wǎng)絡(luò)傳輸利器索尼NXL-ME80 V1.2<b class='flag-5'>新版本</b>發(fā)布

    SOA架構(gòu)開(kāi)發(fā)小助手PAVELINK.SOA-Converter 2.1.2新版本發(fā)布

    為提升汽車(chē)SOA架構(gòu)設(shè)計(jì)開(kāi)發(fā)效率,優(yōu)化用戶體驗(yàn),我們對(duì)PAVELINK.SOA-Converter進(jìn)行了全新升級(jí)。本次2.1.2新版本升級(jí),聚焦于提升軟件性能、擴(kuò)展功能特性及增強(qiáng)用戶交互體驗(yàn)。
    的頭像 發(fā)表于 04-09 10:37 ?1153次閱讀
    SOA架構(gòu)開(kāi)發(fā)小助手PAVELINK.SOA-Converter 2.1.2<b class='flag-5'>新版本</b>發(fā)布

    如何構(gòu)建MCP客戶端

    Anthropic開(kāi)源了一套MCP協(xié)議,它為連接AI系統(tǒng)與數(shù)據(jù)源提供了一個(gè)通用的、開(kāi)放的標(biāo)準(zhǔn),用單一協(xié)議取代了碎片化的集成方式。本文教你從零打造一個(gè)MCP客戶端。
    的頭像 發(fā)表于 03-20 09:32 ?1977次閱讀
    如何構(gòu)建MCP<b class='flag-5'>客戶端</b>

    keil不同版本,有的文件在新版本上報(bào)錯(cuò)怎么辦?要裝兩個(gè)版本一起用?

    有的文件在新版本上報(bào)錯(cuò)怎么辦?要裝兩個(gè)版本一起用?
    發(fā)表于 03-10 07:05

    GUI Guider v1.9.0全新版本上線

    新年伊始,GUI Guider也迎來(lái)了新版本!這一次,我們帶來(lái)了多項(xiàng)重磅更新,旨在為你提供更強(qiáng)大、更便捷的開(kāi)發(fā)體驗(yàn)。無(wú)論你是工業(yè)控制、智能家居,還是消費(fèi)電子領(lǐng)域的開(kāi)發(fā)者,這些更新都將為你的項(xiàng)目注入新的活力!
    的頭像 發(fā)表于 02-07 10:43 ?4252次閱讀

    新版本 IDE 的啟動(dòng)速度變快了?原來(lái)是在背后做了這些!

    新版本 IntelliJ IDEA 中為提高性能而采取的措施,這些措施縮短了代碼可交互時(shí)間并使 IDE 從啟動(dòng)開(kāi)始就具有更高的響應(yīng)速度。
    的頭像 發(fā)表于 01-24 13:49 ?629次閱讀
    <b class='flag-5'>新版本</b> IDE 的啟動(dòng)速度變快了?原來(lái)是在背后做了這些!

    HTTP 協(xié)議的工作原理

    的主要功能是使瀏覽器能夠訪問(wèn)服務(wù)器上的資源,如網(wǎng)頁(yè)、圖片、視頻等。 2. HTTP請(qǐng)求 HTTP請(qǐng)求是客戶端(通常是瀏覽器)向服務(wù)器發(fā)出的請(qǐng)求。一個(gè)HTTP請(qǐng)求由以下幾部分組成: 請(qǐng)求
    的頭像 發(fā)表于 12-30 09:21 ?1446次閱讀

    索尼發(fā)布空間現(xiàn)實(shí)顯示播放器新版本

    索尼于2024年12月發(fā)布適用于空間現(xiàn)實(shí)顯示屏ELF-SR1和ELF-SR2的空間現(xiàn)實(shí)顯示播放器新版本。
    的頭像 發(fā)表于 12-24 15:19 ?845次閱讀

    經(jīng)緯恒潤(rùn)INTEWORK-VBA新版本正式發(fā)布

    和前后端信息傳遞的壓力。面對(duì)這一問(wèn)題,經(jīng)緯恒潤(rùn)積極響應(yīng)市場(chǎng)需求,正式推出INTEWORK-VBAV3系列新版本,整合仿真、診斷、標(biāo)定和測(cè)試等多個(gè)應(yīng)用場(chǎng)景,一站式解
    的頭像 發(fā)表于 11-01 08:00 ?905次閱讀
    經(jīng)緯恒潤(rùn)INTEWORK-VBA<b class='flag-5'>新版本</b>正式發(fā)布

    IBM發(fā)布面向企業(yè)的人工智能模型新版本

    近日,IBM正式發(fā)布了其面向企業(yè)的人工智能模型——Granite 3.0的最新版本,旨在抓住當(dāng)前企業(yè)紛紛擁抱生成式AI技術(shù)的熱潮。與IBM Granite系列中的其他AI模型一樣,Granite 3.0也將采取開(kāi)源策略,這與微軟等競(jìng)爭(zhēng)對(duì)手向客戶收取模型訪問(wèn)
    的頭像 發(fā)表于 10-22 17:32 ?980次閱讀