今天遇到使用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...