1. 程式人生 > >Feign消費服務時POST/GET請求方式

Feign消費服務時POST/GET請求方式

總體說明:

feign消費服務時,以GET方式請求的條件:

如果想讓服務消費者採用GET方式呼叫服務提供者,那麼需要:

1.服務消費者這邊feign呼叫時,在所有引數前加上@RequestParam註解

2.服務消費者這邊feign呼叫時,指明為GET方式(注:如果不指明method,那麼在條件1滿足的情況下,採用的是預設的GET方式)。

注:這裡條件1和條件2,是“且”的關係(都滿足時,才為GET)

feign消費服務時,以POST方式請求的條件:

如果想讓服務消費者採用POST方式呼叫服務提供者,那麼只需要:

1.服務消費者這邊feign呼叫時,在所有引數前加上@RequestParam註解,並指明feign消費服務的方式為POST

2.服務消費者這邊feign呼叫時,有且只有一個引數前為@RequestBody或什麼也沒有(如果有多個引數,那麼其餘引數前必須有@RequestParam)。

注:這裡條件1和條件2,是“或”的關係(當至少一個滿足時,即為POST)

注:在服務消費者中,使用feign消費服務時,如果引數前什麼也不寫,那麼預設是由@RequestBody指明的

即:只要不滿足GET方式請求,那麼POST方式請求是一定支援的

下面進行詳細說明:

無參:

服務消費者以GET方式請求消費服務的情況(示例):

 

不指定method,則預設為get,等同於

 

服務消費者以POST方式請求消費服務的情況(示例):

 

單參:

服務消費者以GET方式請求消費服務的情況(示例):

◎引數前使用了@RequestParam,且指明瞭用GET方式

 

等同於(當所有引數前都有@RequestParam時,這時不指明method,則預設為採用GET方式):

 

服務消費者以POST方式請求消費服務的情況(示例):

◎引數前使用了@RequestParam,且指明瞭用POST方式

 

◎引數前未使用@RequestParam或引數前使用了@RequestBody註解(此時不論是否手動指定請求方式、不論指定的方式是POST還是GET,那麼最終都以POST方式消費服務)

 

 

 

 

注:在服務消費者中,使用feign消費服務時,如果引數前什麼也不寫,那麼預設是由@RequestBody指明的

注:@RequestBody註解的引數,需要POST方式才能傳遞資料。

注:在服務提供者的Controller中,

如果要接收(服務消費中傳過來的)被@RequestBody指明的引數,那麼對應方法的對應引數前一定要有@RequestBody;(如果沒有的話,收到的引數值就為null;如果寫成@RequestParam的話,那麼feign呼叫會失敗)

如果要接收(服務消費中傳過來的)被@RequestParam指明的引數,那麼可以寫@RequestParam,也可以不寫(當服務提供者中對應的引數名字與服務消費者傳過來的引數名字一致時,可以不寫,不一致時,需要寫)

多參:

服務消費者以GET方式請求消費服務的情況(示例):

如果想讓服務消費者採用GET方式呼叫服務提供者,那麼需要:

1.服務消費者這邊feign呼叫時,在所有引數前加上@RequestParam註解

2.服務消費者這邊feign呼叫時,指明為GET方式(注:如果不指明method,那麼在條件1滿足的情況下,預設採用的也是GET方式)。

等同於

服務消費者以POST方式請求消費服務的情況(示例):

多引數時,如果服務消費者想採用POST進行feign呼叫,那麼:服務消費者中該介面方法裡的這些引數前,最多隻能有一個引數是@RequestBody指明的,其餘的引數必須使用@RequestParam指明。

如:

 

等同於(String name 這個引數前什麼也不寫,那麼預設的即為@RequestBody)

 

如果服務消費者這邊feign呼叫時,所有引數前面都使用了@RequestParam註解時,但是指明的是POST方式,那麼最終還是以POST方式進行的:

服務提供者接收時:

◎如果服務消費者傳過來引數時,全都用的是@RequestParam的話,那麼服務提供者的Controller中對應引數前可以寫@RequestParam,也可以不寫(當兩邊引數名字一致時,可以省略不寫)

◎如果服務消費者傳過來引數時,有@RequestBody的話,那麼服務提供者的Controller中對應引數前必須要寫@RequestBody(如果是多引數的話,其餘引數前視情況可以寫@RequestParam,也可以不寫)

 注意:如果介面與介面的實現分別處於兩個服務中,那麼介面就相當於服務消費者,而介面的實現則相當於服務提供者。兩者之間仍然滿足本文上所述要求。

如:

服務消費者中的介面是這樣的:

 

那麼對應的服務提供者中的Controller應該是這樣的:

微笑如有不當之處,歡迎指正

微笑本文已經被收錄進《程式設計師成長筆記(二)》,作者JustryDeng