如何使用Feign構造多引數的請求

2021-10-07 17:37:23 字數 2161 閱讀 6363

tips

本文基於spring cloud greenwich sr1,理論上支援finchley及更高版本。

本節來**如何使用feign構造多引數的請求。筆者以get及post請求為例講解,其他方式(例如delete、put等)的請求原理相通,讀者可自行研究。

假設需請求的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註解等 ...