您好,登錄后才能下訂單哦!
這篇文章主要介紹了SpringCloud Feign參數問題及解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
今天遇到使用Feign調用微服務,傳遞參數時遇到幾個問題
1.無參數
以GET方式請求
服務提供者
@RequestMapping("/hello") public String Hello(){ return "hello,provider"; }
服務消費者
@GetMapping("/hello") String hello();
2.單個參數
(1)GET——@PathVariable
服務提供者
@GetMapping("/test/{name}") public String test(@PathVariable String name){ return "hello,"+name; }
服務消費者
@GetMapping("/test/{name}") String test(@PathVariable("name") String name);
(2)GET——@RequestParam
服務提供者
@RequestMapping("/test") public String test(String name){return "hello,"+name; }
服務消費者
@RequestMapping("/test") String test(@RequestParam String name);
會遇到報錯
RequestParam.value() was empty on parameter 0
解決方法:
加上注解的描述,修改為
@RequestMapping("/test") String test(@RequestParam("name") String name);
(3)POST
@RequestBody
不需要注解的描述
@RequestMapping("/test") String test(@RequestBody String name);
注:
2.Feign多參數的問題
(1)GET——@PathVariable
服務提供者
@GetMapping("/test/{name}/{xyz}") public String test(@PathVariable String name,@PathVariable String xyz){ return "hello,"+name+","+xyz; }
服務消費者
@GetMapping("/test/{name}/{xyz}") String test(@PathVariable("name") String name,@PathVariable("xyz") String xyz);
(1)GET——@RequestParam
服務提供者
@RequestMapping("/test") public String test(String name,Integer type){ if(type==1){ return "hello,"+name; }else{ return "hello,provider-"+name; } }
服務消費者
@RequestMapping("/test") String test(String name, Integer type);
會遇到報錯Method has too many Body parameters
說明:
如果服務消費者傳過來參數時,全都用的是@RequestParam的話,那么服務提供者的Controller中對應參數前可以寫@RequestParam,也可以不寫
服務消費者feign調用時,在所有參數前加上@RequestParam注解
正確的寫法
@RequestMapping("/test") String test(@RequestParam("name") String name, @RequestParam("type") Integer type);
(2)POST
如果接收方不變
服務消費者
@RequestMapping("/test") String test(@RequestBody String name, @RequestBody Integer type);
會遇到報錯Method has too many Body parameters
服務消費者為
@RequestMapping("/test") String test(@RequestBody String name, @RequestParam("type") Integer type);
name的值會為null
說明:
如果服務消費者傳過來參數,有@RequestBody的話,那么服務提供者的Controller中對應參數前必須要寫@RequestBody
正確的寫法
服務提供者
@RequestMapping("/test") public String test(@RequestBody String name, Integer type){ if(type==1){ return "hello,"+name; }else{ return "hello,provider-"+name; } }
服務消費者正確的寫法
@RequestMapping("/test") String test(@RequestBody String name, @RequestParam("type") Integer type);
可以接收到參數
總結:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。