1. 程式人生 > >SpringCloud中Feign服務呼叫請求方式及引數總結

SpringCloud中Feign服務呼叫請求方式及引數總結

前言

最近做微服務架構的專案,在用feign來進行服務間的呼叫。在互調的過程中,難免出現問題,根據錯誤總結了一下,主要是請求方式的錯誤和接引數的錯誤造成的。在此進行一下總結記錄。以下通過分為三種情況說明,無引數,單引數,多引數。每種情況再分get和post兩種請求方式進行說明。這樣的話,6種情況涵蓋了feign呼叫的所有情況。
有個建議就是為了保證不必要的麻煩,在寫feign介面的時候,與我們的對映方法保持絕對一致,同時請求方式,請求引數註解也都不偷懶的寫上。如果遵循這種規範,可以避開90%的呼叫錯誤。

無參情況

無參情況就是說我們的方法內不接收引數。

Get請求

當我們只寫RequestMapping,而不指定RequestMethod的時候。預設的method為一個get請求。

    @RequestMapping("/noArgs/getDemo")
    public void noArgsGetDemo();

Post請求

    @RequestMapping(value = "/noArgs/postDemo",method = RequestMethod.POST)
    public void noArgsPostDemo();

也可以直接使用PostMapping

    @PostMapping(value = "/noArgs/postDemo")
    public void noArgsPostDemo();

單個引數的情況

方法內只有一個引數

Get請求

get請求方式接參,只能使用RequestParam註解

    @RequestMapping(value = "/singleArg/getDemo")
    public void singleArgGetDemo(@RequestParam String name);

不寫RequestMethod註解,預設就是get請求。

Post請求

post請求方式接參,可以使用三種方式,一種是不寫,一種是RequestParam,一種是RequestBody。

RequestParam

先說說RequestParam這種方式。需要指明method,如果不指明則和上方一樣了。預設是get。

    @RequestMapping(value = "/singleArg/PostDemo",method = RequestMethod.POST)
    public void singleArgPostDemo(@RequestParam String name);
RequestBody

一旦使用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請求。

多參

get請求

多個引數也是使用@RequestParam註解。

    @RequestMapping(value = "/moreArgs/getDemo")
    public void moreArgGetDemo(@RequestParam String name,@RequestParam String sex);

使用了RequestParam註解,預設method就是get。

post請求

多個引數只能有一個是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的請求方式就說明白了