輕量級聲明式的Http庫——Feign的獨立使用
前沿
項目中我們經(jīng)常會使用HTTP工具向外部的REST接口發(fā)送請求,大家一般使用Okhttp,或者java的HttpClient發(fā)起,今天給大家介紹一款輕量級聲明式的Http庫(FeignClient),使用起來會使我們的項目代碼更整潔,利于維護!
快速開始
Feign是spring cloud中服務(wù)消費端的調(diào)用框架,通常與ribbon,hystrix等組合使用。 但是在某些項目中,由于遺留原因,整個系統(tǒng)并不是spring cloud項目,甚至不是spring項目,而使用者關(guān)注的重點僅僅是簡化http調(diào)用代碼的編寫。 如果采用httpclient或者okhttp這樣相對較重的框架,對初學(xué)者來說編碼量與學(xué)習曲線都會是一個挑戰(zhàn),而使用spring中RestTemplate,又沒有配置化的解決方案,由此想到是否可以脫離spring cloud,獨立使用Feign。
引入依賴
<dependency> <groupId>com.netflix.feign</groupId> <artifactId>feign-core</artifactId> <version>8.18.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.netflix.feign/feign-gson --> <dependency> <groupId>com.netflix.feign</groupId> <artifactId>feign-gson</artifactId> <version>8.18.0</version> </dependency>
定義接口
public interface OuterService {
@RequestLine("GET /requesr/list?name={name}")
@Headers("Authorization: Basic {token}")
String request(@Param(value = "name") String name,@Param(value = "token") String token);
}
通過@RequestLine指定HTTP請求方式及URL地址,@Param指定參數(shù),可以在url或者header中使用{參數(shù)名}去填充請求參數(shù)。
配置類
OuterService service = Feign.builder() .options(new Options(1000, 3500)) .retryer(new Retryer.Default(5000, 5000, 3)) .target(OuterService.class, http://127.0.0.1:8085);
開始調(diào)用
service.request("test","ad12hj3bhj1b23hj1b2");
json序列化
在項目中,我們發(fā)起的Http請求往往都是json格式,feign同樣提供基于json的對象轉(zhuǎn)換工具,方便我們直接以對象形式交互。
接口層面指定header:
@Headers({"Content-Type: application/json","Accept: application/json"})
指定Encoder跟Decoder
## 指定Gson序列化。也可以使用Jackson序列化(引入其依賴) OuterService service = Feign.builder() .encoder(new GsonEncoder()) .decoder(new GsonDecoder()) .options(new Options(1000, 3500)) .retryer(new Retryer.Default(5000, 5000, 3)) .target(OuterService.class, http://127.0.0.1:8085);
支持我們完成聲明式Http接口調(diào)用
使用攔截器
在配置代理類時可以自定義攔截器
OuterService service = Feign.builder()
.encoder(new GsonEncoder())
.decoder(new GsonDecoder())
.requestInterceptor(template -> {
// template 可以獲取/修改body,header等信息
})
.options(new Options(1000, 3500))
.retryer(new Retryer.Default(5000, 5000, 3))
.target(OuterService.class, http://127.0.0.1:8085);
注解詳解
@RequestLine("GET /messages/detail")
指定請求方式跟請求URL
## get請求
@RequestLine("GET /messages/detail?msg_ids={msgIds}")
## post請求
@RequestLine("POST /messages/detail?msg_ids={msgIds}")
@Param("name")
綁定參數(shù)別名,可以在RequestLine/body/headers等注解中通過{參數(shù)名}去獲取值。
@Headers({"Accept:/", "Accept-Language: zh-cn"})
指定請求header
@Body("{name}")
指定請求返回body值為請求參數(shù)name
@QueryMap
只能標注在方法參數(shù)上。用于傳遞多個查詢值,拼接在URL后面,只能標注在Map類型的參數(shù)前面,否則報錯。
@HeaderMap
同上,只是用在Header上而已
以上就是輕量級聲明式的Http庫——Feign的使用的詳細內(nèi)容,更多關(guān)于Feign的使用的資料請關(guān)注腳本之家其它相關(guān)文章!
- 淺談SpringCloud feign的http請求組件優(yōu)化方案
- SpringCloud Open feign 使用okhttp 優(yōu)化詳解
- 基于Feign使用okhttp的填坑之旅
- 使用okhttp替換Feign默認Client的操作
- Java 如何使用Feign發(fā)送HTTP請求
- spring boot openfeign從此和httpClient說再見詳析
- 使用Spring Cloud Feign作為HTTP客戶端調(diào)用遠程HTTP服務(wù)的方法(推薦)
- spring cloud 之 Feign 使用HTTP請求遠程服務(wù)的實現(xiàn)方法
- 詳解Feign的實現(xiàn)原理
相關(guān)文章
Java多線程并發(fā)synchronized?關(guān)鍵字
這篇文章主要介紹了Java多線程并發(fā)synchronized?關(guān)鍵字,Java?在虛擬機層面提供了?synchronized?關(guān)鍵字供開發(fā)者快速實現(xiàn)互斥同步的重量級鎖來保障線程安全。2022-06-06
java-collection中的null,isEmpty用法
這篇文章主要介紹了java-collection中的null,isEmpty用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
Spring中的@Qualifier注解和@Resource注解區(qū)別解析
這篇文章主要介紹了Spring中的@Qualifier注解和@Resource注解區(qū)別解析,@Qualifier注解的用處是當一個接口有多個實現(xiàn)的時候,為了指名具體調(diào)用哪個類的實現(xiàn),@Resource注解可以通過 byName命名和byType類型的方式注入,需要的朋友可以參考下2023-11-11

