postman使用@ResquetBody和@RequestParam需要注意什么

這篇文章主要介紹“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)變。

1.前言

    如今前后端分離之后,大多采用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)景了。

2. @ResquetParam與@ResquetBody的測(cè)試驗(yàn)證

    場(chǎng)景一:使用@ResquetParam注解,測(cè)試工具:postman。

    后臺(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ò)如下:

postman使用@ResquetBody和@RequestParam需要注意什么

    呵呵,這個(gè)幾個(gè)意思,明明傳遞了userid,卻提示我沒(méi)有傳,不科學(xué)?。。。∽屑?xì)一想,問(wèn)題肯定出在后臺(tái)對(duì)參數(shù)的解析上。

  • 情況三:同時(shí)注意到,如果采用form-data的方式則可以成功請(qǐng)求。

postman使用@ResquetBody和@RequestParam需要注意什么

  • 情況四:如果采用x-www-form-urlencoded的方式也可以成功請(qǐng)求

postman使用@ResquetBody和@RequestParam需要注意什么

        那為什么同樣是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格式的解碼和編碼。

    場(chǎng)景二:使用@ResquetBody注解,測(cè)試工具:postman。

    后臺(tái)參數(shù)接收:

@RequestBody AuthApplyDto authDto
  • 情況一:json格式傳遞,post請(qǐng)求,測(cè)試結(jié)果成功。

postman使用@ResquetBody和@RequestParam需要注意什么

  • 情況二:如果使用@RequestBody接收參數(shù),使用表單格式post請(qǐng)求,又會(huì)發(fā)生什么呢?答案是不支持。

postman使用@ResquetBody和@RequestParam需要注意什么

  • 情況三:如果,請(qǐng)求方式為get,后臺(tái)參數(shù)接收@RequestBody ,如下格式,會(huì)發(fā)生什么呢??答案是肯定的。

    測(cè)試結(jié)果如下:

postman使用@ResquetBody和@RequestParam需要注意什么

3. 干貨總結(jié):

    對(duì)于@RequestParam注解,完全支持get請(qǐng)求,對(duì)于post請(qǐng)求只能接收表單格式的數(shù)據(jù),對(duì)于json序列化的數(shù)據(jù)不支持。
    對(duì)于@RequestBody注解,完全支持get請(qǐng)求,對(duì)于post請(qǐng)求只能接收json序列化的數(shù)據(jù),不支持表單格式的數(shù)據(jù)。

    疑問(wèn),這兩個(gè)注解底層如何做適配解析的?

4. 最后做個(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)

成都定制網(wǎng)站建設(shè)