使用feign客戶端傳參接收不到的問題及解決
feign客戶端傳參接收不到
使用feign客戶端做不用服務(wù)之間的調(diào)用的時候出現(xiàn)了provider獲取不到參數(shù)的問題,在此記錄一下。
先來說一下流程
在我的微服務(wù)中,有這么幾個角色,consumer: 服務(wù)的消費者,provider:服務(wù)的消費者,還有一個feign,主要就是provider的接口形式,然后consumer依賴了feign,去調(diào)用provider中的服務(wù),我在provider中打印獲取的參數(shù),一直為空。
我這里,consumer, feign,provider都是單獨的模塊
我們來看下代碼
首先是provider:提供了一個保存用戶的服務(wù)
@RestController @RequestMapping("/user") @Slf4j public class UserController { ? ? ? @PostMapping("/save") ? ? public String save(User user){ ? ? ? ? log.info("provider: 處理save請求,參數(shù)為:{}",user); ? ? ? ? return "success"; ? ? }
feign代碼:注意這個模塊要添加feign依賴
@FeignClient(name = "service-provider",fallback = UserHystrix.class) public interface UserController { ? ? ? @PostMapping("/user/save") ? ? String save(User user);? }
然后使用consumer通過feign調(diào)用provider:注意 consumer依賴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)用開始。。。。"); ? ? ? ? String result = userController.save(user); ? ? ? ? log.info("feign: 返回: {}", result); ? ? ? ? return "success"; ? ? }??? }
各自服務(wù)啟動后,瀏覽器調(diào)用consumer的 /feign請求,觀察provider日志,發(fā)現(xiàn)獲取到的User參數(shù)沒有值。
如何解決
在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請求,參數(shù)為:{}",user); ? ? ? ? return "success"; ? ? }? }
好了,為了方便大家觀看,在給出以下項目結(jié)構(gòu)吧:
feign傳遞參數(shù)!坑!
以下是FeignClient 注解的接口 中的一個抽象方法
@PostMapping("/bizTask/selectNonCompleteByShopIds") List<BizTask> selectNonCompleteByShopIds(@RequestBody List<Long> shopIds);?
注意這里接口參數(shù) shopIds,該方法的參數(shù)列表也必須和抽象方法一致,否則接不到參數(shù)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java使用IntelliJ IDEA連接MySQL的詳細(xì)教程
這篇文章主要給大家介紹了關(guān)于Java使用IntelliJ IDEA連接MySQL的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04淺談spring使用策略模式實現(xiàn)多種場景登錄方式
本文主要介紹了spring使用策略模式實現(xiàn)多種場景登錄方式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12