最近作微服務架構的項目,在用feign來進行服務間的調用。在互調的過程當中,不免出現問題,根據錯誤總結了一下,主要是請求方式的錯誤和接參數的錯誤形成的。在此進行一下總結記錄。如下經過分爲三種狀況說明,無參數,單參數,多參數。每種狀況再分get和post兩種請求方式進行說明。這樣的話,6種狀況涵蓋了feign調用的全部狀況。
有個建議就是爲了保證沒必要要的麻煩,在寫feign接口的時候,與咱們的映射方法保持絕對一致,同時請求方式,請求參數註解也都不偷懶的寫上。若是遵循這種規範,能夠避開90%的調用錯誤。架構
無參狀況就是說咱們的方法內不接收參數。app
當咱們只寫RequestMapping,而不指定RequestMethod的時候。默認的method爲一個get請求。微服務
@RequestMapping("/noArgs/getDemo") public void noArgsGetDemo();
@RequestMapping(value = "/noArgs/postDemo",method = RequestMethod.POST) public void noArgsPostDemo();
也能夠直接使用PostMappingpost
@PostMapping(value = "/noArgs/postDemo") public void noArgsPostDemo();
方法內只有一個參數code
get請求方式接參,只能使用RequestParam註解接口
@RequestMapping(value = "/singleArg/getDemo") public void singleArgGetDemo(@RequestParam String name);
不寫RequestMethod註解,默認就是get請求。get
post請求方式接參,可使用三種方式,一種是不寫,一種是RequestParam,一種是RequestBody。request
先說說RequestParam這種方式。須要指明method,若是不指明則和上方同樣了。默認是get。請求
@RequestMapping(value = "/singleArg/PostDemo",method = RequestMethod.POST) public void singleArgPostDemo(@RequestParam String name);
一旦使用RequestBody這種方式,他就是post請求,不用寫method了。方法
@RequestMapping(value = "/singleArg/PostDemo") public void singleArgPostDemo(@RequestBody String name);
這個註解就很強勢了,你寫post,不寫或者寫get都沒用,不會生效的,只要有這個方式那他就是Post請求了。
@RequestMapping(value = "/singleArg/PostDemo") public void singleArgPostDemo(String name);
此時默認會在參數前加上RequestBody註解。而後就會變成Post請求。
多個參數也是使用@RequestParam註解。
@RequestMapping(value = "/moreArgs/getDemo") public void moreArgGetDemo(@RequestParam String name,@RequestParam String sex);
使用了RequestParam註解,默認method就是get。
多個參數只能有一個是requestBody方式,其餘應該使用requestParam方式。
@RequestMapping(value = "/moreArgs/postDemo") public void moreArgPostDemo(@RequestBody String name,@RequestParam String sex);
也能夠所有使用RequestParam方式,可是要指定post。
@RequestMapping(value = "/moreArgs/postDemo",method = RequestMethod.POST) public void moreArgPostDemo(@RequestParam String name,@RequestParam String sex);
若是要是參數前,都沒寫註解,則會報錯,由於會默認加上兩個RequestBody。
至此feign的請求方式就說明白了。