在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    8691

    瀏覽量

    151780
  • HTTP
    +關注

    關注

    0

    文章

    511

    瀏覽量

    31459

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

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

收藏 人收藏

    評論

    相關推薦

    經緯恒潤INTEWORK-VBA新版本正式發布

    和前后端信息傳遞的壓力。面對這一問題,經緯恒潤積極響應市場需求,正式推出INTEWORK-VBAV3系列新版本,整合仿真、診斷、標定和測試等多個應用場景,一站式解
    的頭像 發表于 11-01 08:00 ?327次閱讀
    經緯恒潤INTEWORK-VBA<b class='flag-5'>新版本</b>正式發布

    IBM發布面向企業的人工智能模型新版本

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

    萬興科技旗下Wondershare Filmora發布V14全新版本

    近日,萬興科技旗下的視頻創意軟件Wondershare Filmora桌面,正式面向全球市場發布了其備受期待的V14全新版本。此次升級不僅帶來了多項創新功能,還進一步提升了軟件的專業性和易用性,滿足了廣大視頻創作者對高效、高質
    的頭像 發表于 10-08 15:33 ?708次閱讀

    品英Pickering最新版本的微波開關設計工具, 增強了仿真能力和原理圖設計功能

    這 款免 費 在 線 工具的最新版本將在 EuMW 2024(9 月 24 日至 26 日,法國巴黎)上首次亮相,該版本的開關配置功能尤為突出。 ? 2024年9月25日,英國
    發表于 09-25 09:05 ?188次閱讀
    品英Pickering最<b class='flag-5'>新版本</b>的微波開關設計<b class='flag-5'>工具</b>,  增強了仿真能力和原理圖設計功能

    經緯恒潤INTEWORK-TPA 新版本正式發布

    正式推出INTEWORK-TPA5.2.0新版本,以科技的力量,為用戶帶來更智能的體驗升級!▎AI助力,高效測試新版本的AI小助理上線了!借助她的AI大模型能力,測試
    的頭像 發表于 08-30 11:46 ?496次閱讀
    經緯恒潤INTEWORK-TPA <b class='flag-5'>新版本</b>正式發布

    GUI Guider V1.8.0全新版本正式上線

    在這個充滿創新與挑戰的時代,我們深知高效、靈活的GUI設計工具對人機交互應用的重要性。經過幾個月的精心打磨與測試,GUI Guider V1.8.0全新版本正式上線了!本次更新不僅帶來了前所未有的設計自由度,更在功能優化與用戶體
    的頭像 發表于 08-02 09:26 ?921次閱讀

    使用ESP8266板和AT命令集構建一個多客戶端HTTP服務器遇到的疑問求解

    我們正在嘗試使用ESP8266板和 AT 命令集構建一個多客戶端 HTTP 服務器,通過串行端口連接到 Arduino 板。我們正在使用 Arduino Mega 2560 板。它有更多的串行端口
    發表于 07-18 08:03

    如何獲取連接的TCP客戶端的ESPCONN指針?

    我幾乎閱讀了 SDK API 指南版本 1.0.1 的所有文檔 并開始了解如何添加用戶 AT 命令。 這真的很簡單,只需撥打at_cmd_array_register。 BUT! 如何獲取連接的 TCP 客戶端的 ESPCONN 指針?
    發表于 07-12 14:54

    新增6個實用功能!華秋DFM新版本來了

    市場反饋,致力于為廣大工程師用戶帶來更穩定、更高效的功能體驗。在此次4.2新版本中,我們不僅優化了一系列核心功能,大幅提升了軟件性能,還根據大家的反饋新增了幾項實用工具
    的頭像 發表于 07-05 08:07 ?1275次閱讀
    新增6個實用功能!華秋DFM<b class='flag-5'>新版本來了</b>

    服務測試和客戶端測試區別在哪

    服務測試和客戶端測試是軟件開發過程中的兩個重要環節,它們分別針對服務器客戶端的軟件進行測試。本文將詳細介紹服務測試和
    的頭像 發表于 05-30 15:27 ?3398次閱讀

    無法在Modustoolbox 3.2工具類別中找到客戶端控制應用程序,如何解決?

    我最近從 2.4 版升級到了 MTB 3.2 版 我為 343026 BSP 添加了一些示例 但我無法在工具類別中找到客戶端控制應用程序。 如何才能解決問題?
    發表于 05-22 07:50

    谷歌DeepMind發布人工智能模型AlphaFold最新版本

    谷歌DeepMind近日發布了人工智能模型AlphaFold的最新版本——AlphaFold 3,這一革命性的工具將在藥物發現和疾病治療領域發揮巨大作用。
    的頭像 發表于 05-10 11:26 ?621次閱讀

    CANoe新版本18正式發布

    新版本持續為電動智能軟件開發測試帶來系列化的新功能,新版本CANoe產品體系包括具有GUI交互的桌面版本、可部署在服務器后云端的服務器版本、HIL臺架專業
    的頭像 發表于 05-09 08:25 ?4054次閱讀
    CANoe<b class='flag-5'>新版本</b>18正式發布

    HarmonyOS開發實例:【分布式新聞客戶端

    基于柵格布局、設備管理和多端協同,實現一次開發,多端部署的分布式新聞客戶端頁面。
    的頭像 發表于 04-17 15:57 ?921次閱讀
    HarmonyOS開發實例:【分布式新聞<b class='flag-5'>客戶端</b>】

    關于博達透傳工具新版本升級公告

    感謝您一直以來對博達智聯自主研發的遠程透傳工具的支持與信任!為提升廣大用戶的操作體驗,博達智聯團隊經過不懈努力,不斷優化產品功能,將透傳工具進行了全面的升級,即刻發出全新版本。相比于之前的版本
    的頭像 發表于 03-19 08:33 ?507次閱讀
    關于博達透傳<b class='flag-5'>工具</b><b class='flag-5'>新版本</b>升級公告
    主站蜘蛛池模板: 视频在线观看一区二区 | 国产传媒在线观看视频免费观看 | 久久深夜福利 | 国产三级日本三级日产三 | 国产精品久久永久免费 | 日韩成人毛片高清视频免费看 | 8050网| 日本黄大片在线观看 | 美女一级毛片毛片在线播放 | 天堂综合网 | 亚洲综合色一区二区三区小说 | 亚洲美女爱爱 | 在线视频图片小说 | 图片区网友自拍另类图区 | 青草视频网站在线观看 | 丁香综合在线 | 四虎影院免费视频 | xxxxbbbb欧美 | 欧美成人aaa大片 | 午夜影视剧场 | 在线成人看片 | 中文字幕在线第一页 | 免费黄色国产视频 | 久久婷婷一区二区三区 | 国产在线精品美女观看 | 免费我看视频在线观看 | 欧美性精品 | 久久久久久久国产精品影院 | 久久久99精品免费观看精品 | 91大神精品在线观看 | 午夜男人网 | 日本色频 | 国产人成午夜免费噼啪视频 | 高清不卡一区 | 九九re6精品视频在线观看 | 午夜性视频播放免费视频 | 免费在线观看a视频 | 免费在线黄色网 | 美女网站视频一区 | 天天操天天干天天爱 | 黄视频网站在线 |