SpringCloud Feign 引數問題

2022-09-17 11:00:16 字數 2388 閱讀 5921

今天遇到使用feign呼叫微服務,傳遞引數時遇到幾個問題

1.無引數

以get方式請求

服務提供者

public

string hello()

服務消費者

string hello();

2.單個引數

(1)get——@pathvariable

服務提供者

public

string test(@pathvariable string name)

服務消費者

string test(@pathvariable("name") string name);

(2)get——@requestparam

服務提供者

public

string test(string name)

服務消費者

string test(@requestparam string name);

會遇到報錯

requestparam.value() was empty on parameter 0

解決方法:

加上註解的描述,修改為

string test(@requestparam("name") string name);

(3)post

@requestbody

不需要註解的描述

string test(@requestbody string name);

注:引數前使用了@requestbody註解的,都以post方式消費服務

@requestbody註解的引數,需要post方式才能傳遞資料

2.feign多引數的問題

(1)get——@pathvariable

服務提供者

public

string test(@pathvariable string name,@pathvariable string xyz)

服務消費者

string test(@pathvariable("name") string name,@pathvariable("xyz") string xyz);

(1)get——@requestparam

服務提供者

publicstring test(string name,integer type)else

}服務消費者

string test(string name, integer type);

會遇到報錯method has too many body parameters

說明:如果服務消費者傳過來引數時,全都用的是@requestparam的話,那麼服務提供者的controller中對應引數前可以寫@requestparam,也可以不寫

服務消費者feign呼叫時,在所有引數前加上@requestparam註解

正確的寫法

string test(@requestparam("name") string name, @requestparam("type") integer type);

(2)post

如果接收方不變

服務消費者

string test(@requestbody string name, @requestbody integer type);

會遇到報錯method has too many body parameters

服務消費者為

string test(@requestbody string name, @requestparam("type") integer type);

name的值會為null

說明:如果服務消費者傳過來引數,有@requestbody的話,那麼服務提供者的controller中對應引數前必須要寫@requestbody

正確的寫法

服務提供者

public

string test(@requestbody string name, integer type)

else

}服務消費者正確的寫法

string test(@requestbody string name, @requestparam("type") integer type);

可以接收到引數

總結:請求引數前加上註解@pathvariable、@requestparam或@requestbody修飾

可以有多個@requestparam,但只能有不超過乙個@requestbody

使用@requestparam註解時必須要在後面加上引數名

@requestbody用來修飾物件,但是既有@requestbody也有@requestparam,那麼引數就要放在請求的url中,@requestbody修飾的就要放在提交物件中

當引數比較複雜時,feign即使宣告為get請求也會強行使用post請求

SpringCloud Feign引數傳遞問題記錄

物件傳遞 requestbody required false 不支援多物件傳遞,至少我目前發現是這樣的,如有錯誤或者改進的方法請提出 api層 feignclient value transaction feign public inte ce transactionapiservice介面層 交...

Spring Cloud Feign 構造引數請求

假設我們請求的url包含多個引數,例如http microservice provider user get?id 1 username 張三 要怎麼辦呢?我們知道spring cloud為feign新增了spring mvc的註解支援,那麼我們不妨按照spring mvc的寫法嘗試一下 feign...

SpringCloud Feign引數傳遞問題

前言 1.feign不支援get方法傳遞pojo spring mvc 不支援繼承介面中方法引數上的註解 支援繼承類 方法上的註解 所以使用feign呼叫介面時無法直接傳遞pojo 解決方式1 author wx 呼叫訂單服務 feignclient pay order 服務名 public int...