SpringBoot 3.0 新特性內(nèi)置聲明式HTTP客戶端實(shí)例詳解
http interface
從 Spring 6 和 Spring Boot 3 開始,Spring 框架支持將遠(yuǎn)程 HTTP 服務(wù)代理成帶有特定注解的 Java http interface。類似的庫(kù),如 OpenFeign 和 Retrofit 仍然可以使用,但 http interface 為 Spring 框架添加內(nèi)置支持。
什么是聲明式客戶端
聲明式 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( );
測(cè)試使用
1. maven 依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- For webclient support --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency>
如下圖: 目前官方只提供了非阻塞 webclient 的 http interface 實(shí)現(xiàn),所以依賴中我們需要添加 webflux

2. 創(chuàng)建 Http interface 類型
需要再接口類上添加 @HttpExchange 聲明此類事 http interface 端點(diǎn)
@HttpExchange
public interface DemoApi {
@GetExchange("/admin/tenant/list")
String list();方法上支持如下注解
@GetExchange: for HTTP GET requests. @PostExchange: for HTTP POST requests. @PutExchange: for HTTP PUT requests. @DeleteExchange: for HTTP DELETE requests. @PatchExchange: for HTTP PATCH requests.
方法參數(shù)支持的注解
@PathVariable: 占位符參數(shù). @RequestBody: 請(qǐng)求body. @RequestParam: 請(qǐng)求參數(shù). @RequestHeader: 請(qǐng)求頭. @RequestPart: 表單請(qǐng)求. @CookieValue: 請(qǐng)求cookie.
3. 注入聲明式客戶端
通過(guò)給 HttpServiceProxyFactory 注入攜帶目標(biāo)接口 baseUrl 的的 webclient,實(shí)現(xiàn) webclient 和 http interface 的關(guān)聯(lián)
@Bean
DemoApi demoApi() {
WebClient client = WebClient.builder().baseUrl("http://pigx.pigx.vip/").build();
HttpServiceProxyFactory factory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(client)).build();
return factory.createClient(DemoApi.class);
}4. 單元測(cè)試調(diào)用 http interface
@SpringBootTest
class DemoApplicationTests {
@Autowired
private DemoApi demoApi;
@Test
void testDemoApi() {
demoApi.list();
}
}到此這篇關(guān)于SpringBoot 3.0 新特性,內(nèi)置聲明式HTTP客戶端的文章就介紹到這了,更多相關(guān)SpringBoot 聲明式HTTP客戶端內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決spring-boot 打成jar包后 啟動(dòng)時(shí)指定參數(shù)無(wú)效的問(wèn)題
這篇文章主要介紹了解決spring-boot 打成jar包后 啟動(dòng)時(shí)指定參數(shù)無(wú)效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
Java中RSA加密解密的實(shí)現(xiàn)方法分析
這篇文章主要介紹了Java中RSA加密解密的實(shí)現(xiàn)方法,結(jié)合具體實(shí)例形式分析了java實(shí)現(xiàn)RSA加密解密算法的具體步驟與相關(guān)操作技巧,并附帶了關(guān)于RSA算法密鑰長(zhǎng)度/密文長(zhǎng)度/明文長(zhǎng)度的參考說(shuō)明,需要的朋友可以參考下2017-07-07
IntelliJ IDEA安裝插件阿里巴巴Java開發(fā)手冊(cè)(Alibaba Java Coding Guidelines
這篇文章主要介紹了IntelliJ IDEA安裝插件阿里巴巴Java開發(fā)手冊(cè)(Alibaba Java Coding Guidelines),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
解決mybatis執(zhí)行SQL語(yǔ)句部分參數(shù)返回NULL問(wèn)題
這篇文章主要介紹了mybatis執(zhí)行SQL語(yǔ)句部分參數(shù)返回NULL問(wèn)題,需要的的朋友參考下吧2017-06-06
SpringCloud中的分布式鎖用法示例詳解(Java+Redis SETNX命令)
在Spring Cloud項(xiàng)目中,使用Java和Redis結(jié)合實(shí)現(xiàn)的分布式鎖可以確保訂單的一致性和并發(fā)控制,分布式鎖的使用能夠在多個(gè)實(shí)例同時(shí)提交訂單時(shí),僅有一個(gè)實(shí)例可以成功進(jìn)行操作,本文給大家介紹Spring,Cloud中的分布式鎖用法詳解(Java+Redis SETNX命令),感興趣的朋友一起看看吧2023-10-10
Java對(duì)接阿里云短信服務(wù)保姆級(jí)教程(新手秒會(huì))
這篇文章主要介紹了如何在阿里云上申請(qǐng)短信服務(wù)以及如何使用Java代碼進(jìn)行對(duì)接,包括申請(qǐng)資質(zhì)、簽名和模板,以及編寫Java代碼整合成工具類進(jìn)行調(diào)用的步驟,需要的朋友可以參考下2024-12-12

