使用feign客戶端傳參收不到問題

使用feign客戶端做不用服務之間的調用的時候出現了provider獲取不到參數的問題,在此記錄一下。

先來說一下流程: 在我的微服務中,有這麼幾個角色,consumer: 服務的消費者,provider:服務的消費者,還有一個feign,主要就是provider的接口形式,然後consumer依賴了feign,去調用provider中的服務,我在provider中打印獲取的參數,一直爲空。

我這裏,consumer, feign,provider都是單獨的模塊

 

我們來看下代碼: 

首先是provider: 提供了一個保存用戶的服務

@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {

    @PostMapping("/save")
    public String save(User user){
        log.info("provider: 處理save請求,參數爲:{}",user);
        return "success";
    }

 

feign代碼:,注意這個模塊要添加feign依賴

 



@FeignClient(name = "service-provider",fallback = UserHystrix.class)
public interface UserController {

    @PostMapping("/user/save")
    String save(User user);

}

 

然後使用consumer通過feign調用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調用開始。。。。");
        String result = userController.save(user);
        log.info("feign: 返回: {}", result);
        return "success";
    }



}

 

各自服務啓動後,瀏覽器調用consumer的 /feign請求,觀察provider日誌,發現獲取到的User參數沒有值。

如何解決:  在provider中的方法裏的User參數前面,加上  @RequestBody ,注意下面代碼中的註釋部分


@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {

    @PostMapping("/save")
    // 注意加上requestBody,否則容易接收不到參數
    public String save(@RequestBody User user){
        log.info("provider: 處理save請求,參數爲:{}",user);
        return "success";
    }

}

 

好了,爲了方便大家觀看,在給出以下項目結構吧:

 

 

好了,希望對大家有幫助

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章