您好,登錄后才能下訂單哦!
這篇文章主要介紹“SpringCloud feign對象傳參和普通傳參及遇到的坑如何解決”,在日常操作中,相信很多人在SpringCloud feign對象傳參和普通傳參及遇到的坑如何解決問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”SpringCloud feign對象傳參和普通傳參及遇到的坑如何解決”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
使用@RequestBody來指定傳參對象
@RequestMapping(value = "/v2/matterCode/genCode", method = RequestMethod.POST) ResultResponse<String> getCode(@RequestBody MatterCodeBO matterCodeBO);
注意:@RequestBody在一個方法內有且只有一個,不能同時存在兩個!
普通傳參使用@RequestParam來指定參數
@RequestMapping(value = "taskApiController/getAll", method = RequestMethod.POST) List<TaskVO> getAll(@RequestParam("name") String name);
注意:@RequestParam必須指定參數名("name"),否則報錯:RequestParam.value() was empty on parameter 0
首先再次強調Feign是通過http協議調用服務的,重點是要理解這句話,
如果FeignClient中的方法有@PostMapping注解 ,則微服務TaskApiController中對應方法的注解也應當保持一致為@PostMapping,如果不一致,則會報404的錯誤
調用失敗后會觸發它的熔斷機制,如果@FeignClient中不寫@FeignClient(fallback = TaskFeignClientDegraded.class),會直接報錯
11:00:35.686 [http-apr-8086-exec-8] DEBUG c.b.p.m.b.c.AbstractBaseController - Got an exception
com.netflix.hystrix.exception.HystrixRuntimeException: TaskFeignClient#getAll() failed and no fallback available.
at com.netflix.hystrix.AbstractCommand$22.call(AbstractCommand.java:819)
at com.netflix.hystrix.AbstractCommand$22.call(AbstractCommand.java:804)
報錯信息:
feign.FeignException:status 400 reading xxx#xxxx(String); content:
原因:因為feign的那個方法使用的@ReqestParam注解,這個接收的參數長度過長造成的,這也是feign就算使用post方法,參數也會放在請求地址后面,而不是放在請求體里面。
解決辦法:將參數封裝成對象,使用@RequestBody標明參數
另外需要注意,Feign不支持使用GetMapping 和PostMapping
@RequestMapping(value="user/save",method=RequestMethod.POST)
復雜對象使用@RequestBody進行注解,同時接收端也需要使用@RequestBody這個注解。
我遇一個坑:
消費端使用了@RequestBody而服務端沒有接收@RequestBody,這時參數會接收不完整。
//消費端 @RequestMapping(value="user/save",method=RequestMethod.POST) public User save(@RequestBody User user); //服務端 @PostMapping("save") public User save(@RequestBody User user) { System.out.println(user); return UserService.save(user); }
到此,關于“SpringCloud feign對象傳參和普通傳參及遇到的坑如何解決”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。