国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

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

掃碼添加小助手

加入工程師交流群


我們在日常開發中,經常會需要遠程調用其他服務提供的接口,比較常用的 HTTP 遠程代理框架有OpenFeign、Retrofit以及一些第三方封裝工具類,例如Hutool提供的HttpUtil。

11月24日,Spring Boot 3正式發布,Spring官方已經自身支持使用聲明式服務調用的方式來調用遠程接口。

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

雖然類似的遠程調用框架如OpenFeign和Retrofit仍然可以使用,但HttpServiceProxyFactory增加了對 Spring 框架的原生支持。如果Spring本身可以做到遠程調用的話,這些大量的第三方庫應該很快會被原生方法取代,我們今天來了解一下這個新特征。

聲明式 Http 接口

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

引入

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

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

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

創建 HTTP 服務接口

在 Spring 中,HTTP 服務接口是一個帶有@HttpExchange方法的 Java 接口。注釋方法被視為 HTTP 端點,細節通過注釋屬性和輸入方法參數類型靜態定義。

支持的注解類型

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

方法參數

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

返回值

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

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

使用示例

@PutExchange
voidupdate(@PathVariableLongid,@RequestBodyUseruser);

完整使用案例

我們以一個簡單的用戶信息請求為例

0、構建HttpServiceProxyFactory

HttpServiceProxyFactory是一個從 HTTP 服務接口創建客戶端代理的工廠類。使用HttpServiceProxyFactory.builder(client).build()方法來獲取代理 bean 的實例。

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、定義一個簡單的用戶信息實體類:

publicclassUser{

privateintid;

privateStringusername;

privateStringpassword;

//省略

}

2、請求接口:

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 注入應用程序類并調用方法來獲取 API 響應:

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

完工,不需要定義方法實現就能進行遠程HTTP調用,非常方便!



審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    9521

    瀏覽量

    157041
  • HTTP
    +關注

    關注

    0

    文章

    537

    瀏覽量

    35376

原文標題:替換OpenFeign,Spring 新版本自帶的 HTTP 客戶端工具來了!

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    EtherCAT FOE工作原理揭秘:客戶端-服務器模型如何運轉?

    上期我們聊了EtherCATFOE的五大應用場景,本期深入解析其底層工作機制。FOE究竟是如何實現文件傳輸的?答案藏在客戶端-服務器模型中。核心架構:一客戶端多服務器在EtherCAT網絡中,FOE
    的頭像 發表于 03-02 11:50 ?88次閱讀
    EtherCAT FOE工作原理揭秘:<b class='flag-5'>客戶端</b>-服務器模型如何運轉?

    蔚來世界模型NWM全新版本正式推送

    2026年1月28日,「蔚來世界模型 NWM」全新版本正式開啟推送,首批將為超過46萬輛「Banyan 榕」車型推送。「Cedar 雪松」車型及「Cedar S 雪松」車型,也將于近期開啟推送。
    的頭像 發表于 01-28 15:38 ?379次閱讀

    客戶在升級新版本的開發工具后,打開工程,有發現工程中系統字體找不到?

    客戶在升級新版本的開發工具后,打開工程,有發現工程中系統字體找不到?
    發表于 01-20 15:16

    嵌入式開發工具版本的選擇策略

    ,很多時候,還會親自下載安裝嘗鮮。 新版本有時候會引入一些bug,所以用新版本做項目一定要【慎重】,并不一定完全適合你的項目。 軟件工具是否需要升級到最新版本?我的觀點是:如果你做項
    發表于 11-25 06:11

    如何使用新版本J-Flash編程CW32 MCU

    1、從Segger公司官網下載安裝最新版本JLink驅動,比如V7.96a,安裝目錄下沒有JLinkDevices.xml文件。 2、在C:Users<用戶名>
    發表于 11-12 07:24

    agile_ftp傳輸文件時客戶端報錯誤怎么解決?

    ]客戶端使用的filezilla [size=21.3333px] [size=21.3333px]現象: [size=21.3333px]filezilla客戶端可以正常上傳文件,但傳輸完畢時客戶端會報
    發表于 11-05 10:49

    【直播預告】RT-Trace 全新版本發布|ITM輸出 MemoryWatch 功能首發實測! | 問學直播

    RT-Trace迎來又一次重要更新!本次新版本來了兩項備受期待的功能——ITM輸出與MemoryWatch內存監控,讓調試可視化更高效、問題定位更精準。為幫助開發者快速上手新特性
    的頭像 發表于 10-14 11:57 ?540次閱讀
    【直播預告】RT-Trace 全<b class='flag-5'>新版本</b>發布|ITM輸出  MemoryWatch 功能首發實測! | 問學直播

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

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

    戴爾數據保護軟件迎來全新版本

    無縫運行的異常檢測,一站式監控多達150個系統,額外的MFA多重身份驗證Dell PowerProtect Data Manager19.19全新版本現已到來!
    的頭像 發表于 06-27 13:55 ?932次閱讀

    普華基礎軟件開源汽車操作系統新版本代碼上線

    近日,第二十一屆上海國際汽車工業展覽會現場,開源車用操作系統新版本代碼上線儀式在中國電科展臺成功召開。全球首個開源智能駕駛操作系統微內核龘EasyAda V2.1和首個規模化、量產級安全車控操作系統
    的頭像 發表于 04-30 09:17 ?1018次閱讀

    普華基礎軟件開源車用操作系統迎來全新版本

    近日,普華基礎軟件開源車用操作系統媒體發布會在上海中國汽車會客廳召開——全球首個開源智能駕駛操作系統微內核龘EasyAda、開源安全車控操作系統小滿EasyXMen全新版本正式發布。現場,普華基礎軟件開源項目技術團隊專家就開源項目新版本技術亮點、新增功能及社區治理與運營等
    的頭像 發表于 04-25 16:18 ?984次閱讀

    網絡傳輸利器索尼NXL-ME80 V1.2新版本發布

    網絡傳輸利器NXL-ME80,憑借著高畫質、高壓縮比、低延時、高密度輕巧機箱,高冗余能力,一經上市就收到全球客戶的大量好評。基于用戶反饋和市場需求,NXL-ME80新版本V1.2強勢來襲,必將為使用者帶來更好的體驗。
    的頭像 發表于 04-23 14:37 ?1121次閱讀
    網絡傳輸利器索尼NXL-ME80 V1.2<b class='flag-5'>新版本</b>發布

    SOA架構開發小助手PAVELINK.SOA-Converter 2.1.2新版本發布

    為提升汽車SOA架構設計開發效率,優化用戶體驗,我們對PAVELINK.SOA-Converter進行了全新升級。本次2.1.2新版本升級,聚焦于提升軟件性能、擴展功能特性及增強用戶交互體驗。
    的頭像 發表于 04-09 10:37 ?1510次閱讀
    SOA架構開發小助手PAVELINK.SOA-Converter 2.1.2<b class='flag-5'>新版本</b>發布

    如何構建MCP客戶端

    Anthropic開源了一套MCP協議,它為連接AI系統與數據源提供了一個通用的、開放的標準,用單一協議取代了碎片化的集成方式。本文教你從零打造一個MCP客戶端
    的頭像 發表于 03-20 09:32 ?2714次閱讀
    如何構建MCP<b class='flag-5'>客戶端</b>

    keil不同版本,有的文件在新版本上報錯怎么辦?要裝兩個版本一起用?

    有的文件在新版本上報錯怎么辦?要裝兩個版本一起用?
    發表于 03-10 07:05