這篇文章主要介紹“postman使用@ResquetBody和@RequestParam需要注意什么”,在日常操作中,相信很多人在postman使用@ResquetBody和@RequestParam需要注意什么問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”postman使用@ResquetBody和@RequestParam需要注意什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
專注于為中小企業(yè)提供網(wǎng)站建設(shè)、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)鎮(zhèn)江免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了近1000家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
如今前后端分離之后,大多采用json格式的數(shù)據(jù)進(jìn)行交互,Java后臺(tái)一般也就采用發(fā)現(xiàn)用@ResquetBody和@RequestParam兩個(gè)注解進(jìn)行接收參數(shù)。
常規(guī)做法是:
@ResquetBody用來(lái)接收一個(gè)復(fù)雜的包裝類型,比如:
@RequestBody AuthApplyDto authDto
@Data public class AuthApplyDto { private int id; private String status=""; private String userId=""; ... }
@ResquetParam用于接收基本類型或者基本類型及String對(duì)象。當(dāng)然,如果請(qǐng)求參數(shù)不復(fù)雜,使用多個(gè)@ResquetParam也可達(dá)到@ResquetBody同樣的效果(如果參數(shù)不多的時(shí)候)。
但是,很有可能你會(huì)遇到下面的情況:
"Required String parameter 'userid' is not present"
此時(shí),你需要重新審視這兩個(gè)注解的使用場(chǎng)景了。
后臺(tái)參數(shù)接收如下:
@RequestParam(name="userid") String userId, @RequestParam(name="resourceid") String resourceId)
情況一:get方式請(qǐng)求,請(qǐng)求參數(shù)如下:
{ "userid":1, "resourceid":"18" }
測(cè)試結(jié)果:后臺(tái)可以接收。
情況二:post方式請(qǐng)求,json序列化傳遞,請(qǐng)求參數(shù)同上。后臺(tái)報(bào)錯(cuò)如下:
呵呵,這個(gè)幾個(gè)意思,明明傳遞了userid,卻提示我沒(méi)有傳,不科學(xué)?。。。∽屑?xì)一想,問(wèn)題肯定出在后臺(tái)對(duì)參數(shù)的解析上。
情況三:同時(shí)注意到,如果采用form-data的方式則可以成功請(qǐng)求。
情況四:如果采用x-www-form-urlencoded的方式也可以成功請(qǐng)求
那為什么同樣是post請(qǐng)求,json格式的數(shù)據(jù)卻無(wú)法解析。這是因?yàn)榈谌N和第四種都是以表單數(shù)據(jù)提交,content-Type并不是application/json。更多詳情參見(jiàn):四種常見(jiàn)的 POST 提交數(shù)據(jù)方式
也就是說(shuō)Content-Type = application/x-www-form-urlencoded(或者 multipart/form-data) 的編碼方式,二者是表單請(qǐng)求,可以用@RequestParam一個(gè)一個(gè)獲取參數(shù)。而 Content-Type = application/json 的時(shí)候參數(shù)獲取不到。并且會(huì)報(bào)錯(cuò):
- Required String parameter ‘xx’ is not present
那對(duì)于application/json的編碼,應(yīng)該怎么接收呢,答案則是@RequestBody。此注解能夠做json格式的解碼和編碼。
后臺(tái)參數(shù)接收:
@RequestBody AuthApplyDto authDto
情況一:json格式傳遞,post請(qǐng)求,測(cè)試結(jié)果成功。
情況二:如果使用@RequestBody接收參數(shù),使用表單格式post請(qǐng)求,又會(huì)發(fā)生什么呢?答案是不支持。
情況三:如果,請(qǐng)求方式為get,后臺(tái)參數(shù)接收@RequestBody ,如下格式,會(huì)發(fā)生什么呢??答案是肯定的。
測(cè)試結(jié)果如下:
疑問(wèn),這兩個(gè)注解底層如何做適配解析的?
如果請(qǐng)求數(shù)據(jù)為數(shù)組,比如:
{ "ids":[1,2] }
后臺(tái)需要做如下包裝,便可接收。
@RequestBody DeleteIds ids, @Data public class DeleteIds { private Set<Integer> ids; }
到此,關(guān)于“postman使用@ResquetBody和@RequestParam需要注意什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
當(dāng)前文章:postman使用@ResquetBody和@RequestParam需要注意什么
分享路徑:http://bm7419.com/article40/jdioho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、虛擬主機(jī)、品牌網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)公司、全網(wǎng)營(yíng)銷推廣、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)