這篇文章主要講解了“postman中@RequestParam與@RequestBody的使用場景”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“postman中@RequestParam與@RequestBody的使用場景”吧!
臨邑ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!
一直有這么一個(gè)疑問:在使用postman工具測試api接口的時(shí)候,如何使用 json
字符串傳值呢,而不是使用 x-www-form-urlencoded
類型,畢竟通過 key-value
傳值是有局限性的。假如我要測試批量插入數(shù)據(jù)的接口呢,使用 x-www-form-urlencoded
方法根本就不適用于這種場景。
那么如何通過postman工具使用json字符串傳值呢,這里就引申出來了spring的兩個(gè)注解:
@RequestParam
@RequestBody
總而言之,這兩個(gè)注解都可以在后臺接收參數(shù),但是使用場景不一樣。繼續(xù)往下看 ↓
先介紹一下@RequestParam的使用場景:
注解@RequestParam接收的參數(shù)是來自requestHeader中,即請求頭。通常用于GET請求,比如常見的url:http://localhost:8081/spring-boot-study/novel/findByAuthorAndType?author=唐家三少&type=已完結(jié),其在Controller
層的寫法如下圖所示:
@RequestParam有三個(gè)配置參數(shù):
required
表示是否必須,默認(rèn)為 true
,必須。
defaultValue
可設(shè)置請求參數(shù)的默認(rèn)值。
value
為接收url的參數(shù)名(相當(dāng)于key值)。
@RequestParam用來處理 Content-Type
為 application/x-www-form-urlencoded
編碼的內(nèi)容,Content-Type
默認(rèn)為該屬性。
@RequestParam也可用于其它類型的請求,例如:POST、DELETE等請求。比如向表中插入單條數(shù)據(jù),Controller
層的寫法如下圖所示:
由于@RequestParam是用來處理 Content-Type
為 application/x-www-form-urlencoded
編碼的內(nèi)容的,所以在postman中,要選擇body的類型為 x-www-form-urlencoded
,這樣在headers中就自動變?yōu)榱?Content-Type
: application/x-www-form-urlencoded
編碼格式。如下圖所示:
但是這樣不支持批量插入數(shù)據(jù)啊,如果改用 json
字符串來傳值的話,類型設(shè)置為 application/json
,點(diǎn)擊發(fā)送的話,會報(bào)錯(cuò),后臺接收不到值,為 null
。
這時(shí)候,注解@RequestBody就派上用場了。繼續(xù)往下看 ↓
先介紹一下@RequestBody的使用場景:
注解@RequestBody接收的參數(shù)是來自requestBody中,即請求體。一般用于處理非 Content-Type: application/x-www-form-urlencoded
編碼格式的數(shù)據(jù),比如:application/json
、application/xml
等類型的數(shù)據(jù)。
就application/json
類型的數(shù)據(jù)而言,使用注解@RequestBody可以將body里面所有的json數(shù)據(jù)傳到后端,后端再進(jìn)行解析。
舉個(gè)批量插入數(shù)據(jù)的例子,Controller層的寫法如下圖所示:
由于@RequestBody可用來處理 Content-Type
為 application/json
編碼的內(nèi)容,所以在postman中,選擇body的類型為row
-> JSON(application/json)
,這樣在 Headers
中也會自動變?yōu)?Content-Type
: application/json
編碼格式。body內(nèi)的數(shù)據(jù)如下圖所示:
批量向表中插入兩條數(shù)據(jù),這里的 saveBatchNovel()
方法已經(jīng)封裝了 JPA
的 saveAll()
方法。body
里面的 json
語句的 key
值要與后端實(shí)體類的屬性一一對應(yīng)。
注意:前端使用$.ajax的話,一定要指定 contentType: "application/json;charset=utf-8;"
,默認(rèn)為 application/x-www-form-urlencoded
。
上述示例是傳遞到實(shí)體類中的具體寫法,那么如果傳遞到非實(shí)體類中,body里面的json數(shù)據(jù)需要怎么解析呢?我們再來看下面這個(gè)例子:
在body中,我們還是輸入上面的json數(shù)據(jù),根據(jù)分析,上面的json數(shù)據(jù)是一個(gè)List數(shù)組內(nèi)嵌套著map對象,那么在后臺的接收形式可寫為 List
,具體代碼如下圖所示:
postman請求:
控制臺輸出:
得出結(jié)論,通過@RequestBody可以解析Body中json格式的數(shù)據(jù)。
注解@RequestParam接收的參數(shù)是來自requestHeader中,即請求頭。通常用于GET請求,像POST、DELETE等其它類型的請求也可以使用。
注解@RequestBody接收的參數(shù)是來自requestBody中,即請求體。一般用于處理非 Content-Type: application/x-www-form-urlencoded
編碼格式的數(shù)據(jù),比如:application/json
、application/xml
等類型的數(shù)據(jù)。通常用于接收POST、DELETE等類型的請求數(shù)據(jù),GET類型也可以適用。
感謝各位的閱讀,以上就是“postman中@RequestParam與@RequestBody的使用場景”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對postman中@RequestParam與@RequestBody的使用場景這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!