SpringCloud——Feign調用時遇到的二個有趣的點

在寫畢業設計的過程中遇到2個關於Feign調用的有趣點

  1. 當你編寫Feign時,當你的參數內含有一個普通對象的時候,這裏的GET請求在Feign傳遞過程中便會自動轉換成POST請求,就需要按照如下的編寫。客戶端可以爲GET請求,接收前端得到的參數,於此同時服務端就需要改爲POST請求

客戶端:

@RequestMapping(value = "/list" , method = RequestMethod.GET)
public Object getList(PmsProductQueryParam pmsProductQueryParam,
                       @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
                       @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum){
}

服務端:

@RequestMapping(value = "/list" , method = RequestMethod.POST)
public Object getList(@RequestBody PmsProductQueryParam pmsProductQueryParam,
                       @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize,
                       @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum){
}

如果你在服務端是GET請求,那麼就會報請求的GET請求方式不符的問題(應該是405錯誤),因爲上文所提到的,你的請求類型已經自動被轉爲POST請求了

  1. 通過Feign傳遞複雜對象的時候,就會造成傳遞的對象丟值的問題。依舊是上文的接口,pmsProductQueryParam這個類在傳遞過程到最後直接丟值,導致接口錯誤。

Solution:解決辦法也很簡單,加上@RequestBody註解。原因的話是因爲Feign傳遞過程中會把你想要傳遞的對象塞入RequestBody中,如果你不加註解,自然也就讀取不到這個類的數據了

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