tips本節來**如何使用feign構造多引數的請求。筆者以get及post請求為例講解,其他方式(例如delete、put等)的請求原理相通,讀者可自行研究。本文基於spring cloud greenwich sr1,理論上支援finchley及更高版本。
假設需請求的url包含多個引數,例如http://microservice-provider-user/get?id=1&username=張三
,該如何使用feign構造呢?
我們知道,spring cloud為feign新增了spring mvc的註解支援,那麼我們不妨按照spring mvc的寫法嘗試一下:
123
45
@feignclient("microservice-provider-user")
public inte***ce userfeignclient
然而,這種寫法並不正確,控制台會輸出類似如下的異常。
1
2
feign.feignexception: status 405 reading userfeignclient#get0(user); content:
由異常可知,儘管我們指定了get方法,feign依然會使用post方法傳送請求。於是導致了異常。正確寫法如下
123
45
@feignclient("microservice-provider-user")
public inte***ce userfeignclient
123
45
@feignclient(name = "microservice-provider-user")
public inte***ce userfeignclient
這是最為直觀的方式,url有幾個引數,feign介面中的方法就有幾個引數。使用@requestparam註解指定請求的引數是什麼。
多引數的url也可使用map來構建。當目標url引數非常多的時候,可使用這種方式簡化feign介面的編寫。
123
45
@feignclient(name = "microservice-provider-user")
public inte***ce userfeignclient
在呼叫時,可使用類似以下的**。
123
456
public user get(string username, string password)
注意:這種方式不建議使用。主要是因為可讀性不好,而且如果引數為空的時候會有一些問題,例如map.put("username", null);
會導致microservice-provider-user
服務接收到的username是""
,而不是null。
下面來討論如何使用feign構造包含多個引數的post請求。假設服務提供者的controller是這樣編寫的:
123
4567
@restcontroller
public class usercontroller
}
我們要如何使用feign去請求呢?答案非常簡單,示例:
123
45
@feignclient(name = "microservice-provider-user")
public inte***ce userfeignclient
feign構造多引數請求
get請求多引數的url 假設我們請求的url包含多個引數,例如http microservice provider user get?id 1 username 張三 要怎麼辦呢?我們知道spring cloud為feign新增了spring mvc的註解支援,那麼我們不妨按照spring mvc...
feign如何使用?
在客戶端 user 引入依賴 org.springframework.cloud spring cloud starter openfeign 在啟動類上面加上註解 enablefeignclients 然後編寫乙個service類加上 feignclient 註解 引數就是你的微服務名字 feig...
feign如何使用
feign是netflix開發的宣告式 模板化的http客戶端,feign可以幫助我們更快捷 優雅地呼叫http api。說人話就是原來我們可以用resttemplate和okhttp呼叫,但是有些問題不好處理,現在我們用它了 feign支援多種註解,例如feign自帶的註解或者jax rs註解等 ...