輕量級(jí)聲明式的Http庫(kù)——Feign的獨(dú)立使用
前沿
項(xiàng)目中我們經(jīng)常會(huì)使用HTTP工具向外部的REST接口發(fā)送請(qǐng)求,大家一般使用Okhttp,或者java的HttpClient發(fā)起,今天給大家介紹一款輕量級(jí)聲明式的Http庫(kù)(FeignClient),使用起來(lái)會(huì)使我們的項(xiàng)目代碼更整潔,利于維護(hù)!
快速開(kāi)始
Feign是spring cloud中服務(wù)消費(fèi)端的調(diào)用框架,通常與ribbon,hystrix等組合使用。 但是在某些項(xiàng)目中,由于遺留原因,整個(gè)系統(tǒng)并不是spring cloud項(xiàng)目,甚至不是spring項(xiàng)目,而使用者關(guān)注的重點(diǎn)僅僅是簡(jiǎn)化http調(diào)用代碼的編寫(xiě)。 如果采用httpclient或者okhttp這樣相對(duì)較重的框架,對(duì)初學(xué)者來(lái)說(shuō)編碼量與學(xué)習(xí)曲線(xiàn)都會(huì)是一個(gè)挑戰(zhàn),而使用spring中RestTemplate,又沒(méi)有配置化的解決方案,由此想到是否可以脫離spring cloud,獨(dú)立使用Feign。
引入依賴(lài)
<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); }
通過(guò)@RequestLine指定HTTP請(qǐng)求方式及URL地址,@Param指定參數(shù),可以在url或者h(yuǎn)eader中使用{參數(shù)名}去填充請(qǐng)求參數(shù)。
配置類(lèi)
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);
開(kāi)始調(diào)用
service.request("test","ad12hj3bhj1b23hj1b2");
json序列化
在項(xiàng)目中,我們發(fā)起的Http請(qǐng)求往往都是json格式,feign同樣提供基于json的對(duì)象轉(zhuǎn)換工具,方便我們直接以對(duì)象形式交互。
接口層面指定header:
@Headers({"Content-Type: application/json","Accept: application/json"})
指定Encoder跟Decoder
## 指定Gson序列化。也可以使用Jackson序列化(引入其依賴(lài)) 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)用
使用攔截器
在配置代理類(lèi)時(shí)可以自定義攔截器
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")
指定請(qǐng)求方式跟請(qǐng)求URL
## get請(qǐng)求 @RequestLine("GET /messages/detail?msg_ids={msgIds}") ## post請(qǐng)求 @RequestLine("POST /messages/detail?msg_ids={msgIds}")
@Param("name")
綁定參數(shù)別名,可以在RequestLine/body/headers等注解中通過(guò){參數(shù)名}去獲取值。
@Headers({"Accept:/", "Accept-Language: zh-cn"})
指定請(qǐng)求header
@Body("{name}")
指定請(qǐng)求返回body值為請(qǐng)求參數(shù)name
@QueryMap
只能標(biāo)注在方法參數(shù)上。用于傳遞多個(gè)查詢(xún)值,拼接在URL后面,只能標(biāo)注在Map類(lèi)型的參數(shù)前面,否則報(bào)錯(cuò)。
@HeaderMap
同上,只是用在Header上而已
以上就是輕量級(jí)聲明式的Http庫(kù)——Feign的使用的詳細(xì)內(nèi)容,更多關(guān)于Feign的使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 淺談SpringCloud feign的http請(qǐng)求組件優(yōu)化方案
- SpringCloud Open feign 使用okhttp 優(yōu)化詳解
- 基于Feign使用okhttp的填坑之旅
- 使用okhttp替換Feign默認(rèn)Client的操作
- Java 如何使用Feign發(fā)送HTTP請(qǐng)求
- spring boot openfeign從此和httpClient說(shuō)再見(jiàn)詳析
- 使用Spring Cloud Feign作為HTTP客戶(hù)端調(diào)用遠(yuǎn)程HTTP服務(wù)的方法(推薦)
- spring cloud 之 Feign 使用HTTP請(qǐng)求遠(yuǎn)程服務(wù)的實(shí)現(xiàn)方法
- 詳解Feign的實(shí)現(xiàn)原理
相關(guān)文章
Spring Security其它權(quán)限校驗(yàn)方式&自定義權(quán)限校驗(yàn)方式
這篇文章主要介紹了Spring Security其它權(quán)限校驗(yàn)方式&自定義權(quán)限校驗(yàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08在spring中實(shí)例化bean無(wú)效的問(wèn)題
這篇文章主要介紹了在spring中實(shí)例化bean無(wú)效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02SpringBoot 下在 yml 中的 logging 日志配置方法
logging 配置主要用于控制應(yīng)用程序的日志輸出行為,可以通過(guò)配置定制日志的格式、級(jí)別、輸出位置等,這篇文章主要介紹了SpringBoot 下在 yml 中的 logging 日志配置,需要的朋友可以參考下2024-06-06通過(guò)實(shí)例了解java checked和unchecked異常
這篇文章主要介紹了通過(guò)實(shí)例了解checked和unchecked異常,Java異常分為兩種類(lèi)型,checked異常和unchecked異常,另一種叫法是異常和錯(cuò)誤。下面小編就帶大家來(lái)一起學(xué)習(xí)一下吧2019-06-06基于SpringBoot實(shí)現(xiàn)用戶(hù)身份驗(yàn)證工具
這篇文章主要介紹了基于SpringBoot實(shí)現(xiàn)的用戶(hù)身份驗(yàn)證工具,非常不錯(cuò),具有參考借鑒價(jià)值 ,需要的朋友可以參考下2018-04-04IDEA里找不到Maven的有效解決辦法(小白超詳細(xì))
這篇文章主要給大家介紹了關(guān)于IDEA里找不到Maven的有效解決辦法,文中通過(guò)圖文將解決的辦法介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07解決IDEA 2020.1版本 maven Test命令出現(xiàn)導(dǎo)包錯(cuò)誤的問(wèn)題
這篇文章主要介紹了IDEA 2020.1版本 maven Test命令出現(xiàn)導(dǎo)包錯(cuò)誤的問(wèn)題及解決方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08關(guān)于實(shí)體類(lèi)中Date屬性格式化@JsonFormat @DateTimeFormat
這篇文章主要介紹了關(guān)于實(shí)體類(lèi)中Date屬性格式化@JsonFormat @DateTimeFormat問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07