- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > 編程語(yǔ)言 >
- 輕量級聲明式的Http庫——Feign的獨立使用
項目中我們經(jīng)常會(huì )使用HTTP工具向外部的REST接口發(fā)送請求,大家一般使用Okhttp,或者java的HttpClient發(fā)起,今天給大家介紹一款輕量級聲明式的Http庫(FeignClient),使用起來(lái)會(huì )使我們的項目代碼更整潔,利于維護!
Feign是spring cloud中服務(wù)消費端的調用框架,通常與ribbon,hystrix等組合使用。 但是在某些項目中,由于遺留原因,整個(gè)系統并不是spring cloud項目,甚至不是spring項目,而使用者關(guān)注的重點(diǎn)僅僅是簡(jiǎn)化http調用代碼的編寫(xiě)。 如果采用httpclient或者okhttp這樣相對較重的框架,對初學(xué)者來(lái)說(shuō)編碼量與學(xué)習曲線(xiàn)都會(huì )是一個(gè)挑戰,而使用spring中RestTemplate,又沒(méi)有配置化的解決方案,由此想到是否可以脫離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); }
通過(guò)@RequestLine指定HTTP請求方式及URL地址,@Param指定參數,可以在url或者header中使用{參數名}去填充請求參數。
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);
service.request("test","ad12hj3bhj1b23hj1b2");
在項目中,我們發(fā)起的Http請求往往都是json格式,feign同樣提供基于json的對象轉換工具,方便我們直接以對象形式交互。
@Headers({"Content-Type: application/json","Accept: application/json"})
## 指定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接口調用
在配置代理類(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, );
指定請求方式跟請求URL
## get請求 @RequestLine("GET /messages/detail?msg_ids={msgIds}") ## post請求 @RequestLine("POST /messages/detail?msg_ids={msgIds}")
綁定參數別名,可以在RequestLine/body/headers等注解中通過(guò){參數名}去獲取值。
指定請求header
指定請求返回body值為請求參數name
只能標注在方法參數上。用于傳遞多個(gè)查詢(xún)值,拼接在URL后面,只能標注在Map類(lèi)型的參數前面,否則報錯。
同上,只是用在Header上而已
以上就是輕量級聲明式的Http庫——Feign的使用的詳細內容,更多關(guān)于Feign的使用的資料請關(guān)注腳本之家其它相關(guān)文章!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站