SpringCloud Feign參數(shù)問題及解決方法
這篇文章主要介紹了SpringCloud Feign參數(shù)問題及解決方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
今天遇到使用Feign調(diào)用微服務(wù),傳遞參數(shù)時遇到幾個問題
1.無參數(shù)
以GET方式請求
服務(wù)提供者
@RequestMapping("/hello")
public String Hello(){
return "hello,provider";
}
服務(wù)消費者
@GetMapping("/hello")
String hello();
2.單個參數(shù)
(1)GET——@PathVariable
服務(wù)提供者
@GetMapping("/test/{name}")
public String test(@PathVariable String name){
return "hello,"+name;
}
服務(wù)消費者
@GetMapping("/test/{name}")
String test(@PathVariable("name") String name);
(2)GET——@RequestParam
服務(wù)提供者
@RequestMapping("/test")
public String test(String name){return "hello,"+name;
}
服務(wù)消費者
@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);
注:
- 參數(shù)前使用了@RequestBody注解的,都以POST方式消費服務(wù)
- @RequestBody注解的參數(shù),需要POST方式才能傳遞數(shù)據(jù)
2.Feign多參數(shù)的問題
(1)GET——@PathVariable
服務(wù)提供者
@GetMapping("/test/{name}/{xyz}")
public String test(@PathVariable String name,@PathVariable String xyz){
return "hello,"+name+","+xyz;
}
服務(wù)消費者
@GetMapping("/test/{name}/{xyz}")
String test(@PathVariable("name") String name,@PathVariable("xyz") String xyz);
(1)GET——@RequestParam
服務(wù)提供者
@RequestMapping("/test")
public String test(String name,Integer type){
if(type==1){
return "hello,"+name;
}else{
return "hello,provider-"+name;
}
}
服務(wù)消費者
@RequestMapping("/test")
String test(String name, Integer type);
會遇到報錯Method has too many Body parameters
說明:
如果服務(wù)消費者傳過來參數(shù)時,全都用的是@RequestParam的話,那么服務(wù)提供者的Controller中對應(yīng)參數(shù)前可以寫@RequestParam,也可以不寫
服務(wù)消費者feign調(diào)用時,在所有參數(shù)前加上@RequestParam注解
正確的寫法
@RequestMapping("/test")
String test(@RequestParam("name") String name, @RequestParam("type") Integer type);
(2)POST
如果接收方不變
服務(wù)消費者
@RequestMapping("/test")
String test(@RequestBody String name, @RequestBody Integer type);
會遇到報錯Method has too many Body parameters
服務(wù)消費者為
@RequestMapping("/test")
String test(@RequestBody String name, @RequestParam("type") Integer type);
name的值會為null
說明:
如果服務(wù)消費者傳過來參數(shù),有@RequestBody的話,那么服務(wù)提供者的Controller中對應(yīng)參數(shù)前必須要寫@RequestBody
正確的寫法
服務(wù)提供者
@RequestMapping("/test")
public String test(@RequestBody String name, Integer type){
if(type==1){
return "hello,"+name;
}else{
return "hello,provider-"+name;
}
}
服務(wù)消費者正確的寫法
@RequestMapping("/test")
String test(@RequestBody String name, @RequestParam("type") Integer type);
可以接收到參數(shù)
總結(jié):
- 請求參數(shù)前加上注解@PathVariable、@RequestParam或@RequestBody修飾
- 可以有多個@RequestParam,但只能有不超過一個@RequestBody
- 使用@RequestParam注解時必須要在后面加上參數(shù)名
- @RequestBody用來修飾對象,但是既有@RequestBody也有@RequestParam,那么參數(shù)就要放在請求的url中,@RequestBody修飾的就要放在提交對象中
- 當參數(shù)比較復(fù)雜時,feign即使聲明為get請求也會強行使用post請求
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springBoot+mybatis-plus實現(xiàn)監(jiān)聽mysql數(shù)據(jù)庫的數(shù)據(jù)增刪改
mybatis-plus技術(shù)是簡化了繁瑣的代碼操作,把增刪改查的語句都內(nèi)置了,直接調(diào)用就可以實現(xiàn)數(shù)據(jù)庫的增刪改查了,這篇文章主要給大家介紹了關(guān)于springBoot+mybatis-plus實現(xiàn)監(jiān)聽mysql數(shù)據(jù)庫數(shù)據(jù)增刪改的相關(guān)資料,需要的朋友可以參考下2024-01-01
Spring Boot通過Redis實現(xiàn)防止重復(fù)提交
表單提交是一個非常常見的功能,如果不加控制,容易因為用戶的誤操作或網(wǎng)絡(luò)延遲導(dǎo)致同一請求被發(fā)送多次,本文主要介紹了Spring Boot通過Redis實現(xiàn)防止重復(fù)提交,具有一定的參考價值,感興趣的可以了解一下2024-06-06
netty?pipeline中的inbound和outbound事件傳播分析
這篇文章主要為大家介紹了netty?pipeline中的inbound和outbound事件傳播分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04
Spring-AOP @AspectJ進階之如何綁定代理對象
這篇文章主要介紹了Spring-AOP @AspectJ進階之如何綁定代理對象的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
spring webflux自定義netty 參數(shù)解析
這篇文章主要介紹了spring webflux自定義netty 參數(shù)解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
Java/Android 獲取網(wǎng)絡(luò)重定向文件的真實URL的示例代碼
本篇文章主要介紹了Java/Android 獲取網(wǎng)絡(luò)重定向文件的真實URL的示例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11

