SpringCloud Feign服務(wù)調(diào)用請(qǐng)求方式總結(jié)
前言
最近做微服務(wù)架構(gòu)的項(xiàng)目,在用feign來進(jìn)行服務(wù)間的調(diào)用。在互調(diào)的過程中,難免出現(xiàn)問題,根據(jù)錯(cuò)誤總結(jié)了一下,主要是請(qǐng)求方式的錯(cuò)誤和接參數(shù)的錯(cuò)誤造成的。在此進(jìn)行一下總結(jié)記錄。以下通過分為三種情況說明,無參數(shù),單參數(shù),多參數(shù)。每種情況再分get和post兩種請(qǐng)求方式進(jìn)行說明。這樣的話,6種情況涵蓋了feign調(diào)用的所有情況。
有個(gè)建議就是為了保證不必要的麻煩,在寫feign接口的時(shí)候,與我們的映射方法保持絕對(duì)一致,同時(shí)請(qǐng)求方式,請(qǐng)求參數(shù)注解也都不偷懶的寫上。如果遵循這種規(guī)范,可以避開90%的調(diào)用錯(cuò)誤。
無參情況
無參情況就是說我們的方法內(nèi)不接收參數(shù)。
Get請(qǐng)求
當(dāng)我們只寫RequestMapping,而不指定RequestMethod的時(shí)候。默認(rèn)的method為一個(gè)get請(qǐng)求。
@RequestMapping("/noArgs/getDemo") public void noArgsGetDemo();
Post請(qǐng)求
@RequestMapping(value = "/noArgs/postDemo",method = RequestMethod.POST) public void noArgsPostDemo();
也可以直接使用PostMapping
@PostMapping(value = "/noArgs/postDemo") public void noArgsPostDemo();
單個(gè)參數(shù)的情況
方法內(nèi)只有一個(gè)參數(shù)
Get請(qǐng)求
get請(qǐng)求方式接參,只能使用RequestParam注解
@RequestMapping(value = "/singleArg/getDemo") public void singleArgGetDemo(@RequestParam String name);
不寫RequestMethod注解,默認(rèn)就是get請(qǐng)求。
Post請(qǐng)求
post請(qǐng)求方式接參,可以使用三種方式,一種是不寫,一種是RequestParam,一種是RequestBody。
RequestParam
先說說RequestParam這種方式。需要指明method,如果不指明則和上方一樣了。默認(rèn)是get。
@RequestMapping(value = "/singleArg/PostDemo",method = RequestMethod.POST) public void singleArgPostDemo(@RequestParam String name);
RequestBody
一旦使用RequestBody這種方式,他就是post請(qǐng)求,不用寫method了。
@RequestMapping(value = "/singleArg/PostDemo") public void singleArgPostDemo(@RequestBody String name);
這個(gè)注解就很強(qiáng)勢(shì)了,你寫post,不寫或者寫get都沒用,不會(huì)生效的,只要有這個(gè)方式那他就是Post請(qǐng)求了。
啥也不寫
@RequestMapping(value = "/singleArg/PostDemo") public void singleArgPostDemo(String name);
此時(shí)默認(rèn)會(huì)在參數(shù)前加上RequestBody注解。然后就會(huì)變成Post請(qǐng)求。
多參
get請(qǐng)求
多個(gè)參數(shù)也是使用@RequestParam注解。
@RequestMapping(value = "/moreArgs/getDemo") public void moreArgGetDemo(@RequestParam String name,@RequestParam String sex);
使用了RequestParam注解,默認(rèn)method就是get。
post請(qǐng)求
多個(gè)參數(shù)只能有一個(gè)是requestBody方式,其他應(yīng)該使用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);
如果要是參數(shù)前,都沒寫注解,則會(huì)報(bào)錯(cuò),因?yàn)闀?huì)默認(rèn)加上兩個(gè)RequestBody。
總結(jié)
至此feign的請(qǐng)求方式就說明白了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- SpringCloud通過Nacos實(shí)現(xiàn)注冊(cè)中心與遠(yuǎn)程服務(wù)調(diào)用詳解流程
- SpringCloud超詳細(xì)講解Feign聲明式服務(wù)調(diào)用
- springcloud使用feign調(diào)用服務(wù)時(shí)參數(shù)內(nèi)容過大問題
- springcloud?feign服務(wù)之間調(diào)用,date類型轉(zhuǎn)換錯(cuò)誤的問題
- SpringCloud之Feign代理,聲明式服務(wù)調(diào)用方式
- SpringCloud 服務(wù)負(fù)載均衡和調(diào)用 Ribbon、OpenFeign的方法
- SpringCloud讓微服務(wù)實(shí)現(xiàn)指定程序調(diào)用
- SpringCloud服務(wù)的發(fā)現(xiàn)與調(diào)用詳解
- SpringCloud遠(yuǎn)程服務(wù)調(diào)用三種方式及原理
相關(guān)文章
Java實(shí)現(xiàn)DFA算法對(duì)敏感詞、廣告詞過濾功能示例
本篇文章主要介紹了Java實(shí)現(xiàn)DFA算法對(duì)敏感詞、廣告詞過濾功能示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11SpringCloud+MyBatis分頁處理(前后端分離)
這篇文章主要為大家詳細(xì)介紹了SpringCloud+MyBatis分頁處理,前后端分離,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10Flutter ListView 上拉加載更多下拉刷新功能實(shí)現(xiàn)方法
這篇文章主要介紹了Flutter ListView 上拉加載更多下拉刷新功能實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07Java字節(jié)與字符流永久存儲(chǔ)json數(shù)據(jù)
本篇文章給大家詳細(xì)講述了Java字節(jié)與字符流永久存儲(chǔ)json數(shù)據(jù)的方法,以及代碼分享,有興趣的參考學(xué)習(xí)下。2018-02-02Mybatis如何使用@Mapper和@MapperScan注解實(shí)現(xiàn)映射關(guān)系
這篇文章主要介紹了Mybatis使用@Mapper和@MapperScan注解實(shí)現(xiàn)映射關(guān)系,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10Java中IO流文件讀取、寫入和復(fù)制的實(shí)例
下面小編就為大家?guī)硪黄狫ava中IO流文件讀取、寫入和復(fù)制的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10