使用feign客戶端傳參接收不到的問(wèn)題及解決
feign客戶端傳參接收不到
使用feign客戶端做不用服務(wù)之間的調(diào)用的時(shí)候出現(xiàn)了provider獲取不到參數(shù)的問(wèn)題,在此記錄一下。
先來(lái)說(shuō)一下流程
在我的微服務(wù)中,有這么幾個(gè)角色,consumer: 服務(wù)的消費(fèi)者,provider:服務(wù)的消費(fèi)者,還有一個(gè)feign,主要就是provider的接口形式,然后consumer依賴(lài)了feign,去調(diào)用provider中的服務(wù),我在provider中打印獲取的參數(shù),一直為空。
我這里,consumer, feign,provider都是單獨(dú)的模塊
我們來(lái)看下代碼
首先是provider:提供了一個(gè)保存用戶的服務(wù)
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
?
? ? @PostMapping("/save")
? ? public String save(User user){
? ? ? ? log.info("provider: 處理save請(qǐng)求,參數(shù)為:{}",user);
? ? ? ? return "success";
? ? }feign代碼:注意這個(gè)模塊要添加feign依賴(lài)
@FeignClient(name = "service-provider",fallback = UserHystrix.class)
public interface UserController {
?
? ? @PostMapping("/user/save")
? ? String save(User user);?
}
然后使用consumer通過(guò)feign調(diào)用provider:注意 consumer依賴(lài)feign,上代碼:
@RestController
@Slf4j
public class FeignController {
?
? ? @Autowired
? ? private UserController userController;
?
? ? @RequestMapping("/feign")
? ? public String test(){
? ? ? ? User user = new User();
? ? ? ? user.setName("zhangsan");
? ? ? ? user.setAge(10);
? ? ? ? log.info("feign調(diào)用開(kāi)始。。。。");
? ? ? ? String result = userController.save(user);
? ? ? ? log.info("feign: 返回: {}", result);
? ? ? ? return "success";
? ? }???
}各自服務(wù)啟動(dòng)后,瀏覽器調(diào)用consumer的 /feign請(qǐng)求,觀察provider日志,發(fā)現(xiàn)獲取到的User參數(shù)沒(méi)有值。
如何解決
在provider中的方法里的User參數(shù)前面,加上 @RequestBody ,注意下面代碼中的注釋部分
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
?
? ? @PostMapping("/save")
? ? // 注意加上requestBody,否則容易接收不到參數(shù)
? ? public String save(@RequestBody User user){
? ? ? ? log.info("provider: 處理save請(qǐng)求,參數(shù)為:{}",user);
? ? ? ? return "success";
? ? }?
}好了,為了方便大家觀看,在給出以下項(xiàng)目結(jié)構(gòu)吧:

feign傳遞參數(shù)!坑!
以下是FeignClient 注解的接口 中的一個(gè)抽象方法
@PostMapping("/bizTask/selectNonCompleteByShopIds")
List<BizTask> selectNonCompleteByShopIds(@RequestBody List<Long> shopIds);?注意這里接口參數(shù) shopIds,該方法的參數(shù)列表也必須和抽象方法一致,否則接不到參數(shù)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java使用IntelliJ IDEA連接MySQL的詳細(xì)教程
這篇文章主要給大家介紹了關(guān)于Java使用IntelliJ IDEA連接MySQL的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
淺談spring使用策略模式實(shí)現(xiàn)多種場(chǎng)景登錄方式
本文主要介紹了spring使用策略模式實(shí)現(xiàn)多種場(chǎng)景登錄方式,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12

