最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解讀@RequestBody與post請求的關(guān)系

 更新時(shí)間:2022年12月29日 10:02:00   作者:勵志工程師  
這篇文章主要介紹了解讀@RequestBody與post請求的關(guān)系,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

@RequestBody與post請求的關(guān)系

@RequestBody主要用來接收前端傳遞給后端的json字符串中的數(shù)據(jù)的(請求體中的數(shù)據(jù)的);

GET方式無請求體,所以使用@RequestBody接收數(shù)據(jù)時(shí),前端不能使用GET方式提交數(shù)據(jù),而是用POST方式進(jìn)行提交。

在后端的同一個(gè)接收方法里,@RequestBody與@RequestParam()可以同時(shí)使用,@RequestBody最多只能有一個(gè),而@RequestParam()可以有多個(gè)。

  • 注:一個(gè)請求,只有一個(gè)RequestBody;一個(gè)請求,可以有多個(gè)RequestParam。
  • 注:當(dāng)同時(shí)使用@RequestParam()和@RequestBody時(shí),@RequestParam()指定的參數(shù)可以是普通元素、

數(shù)組、集合、對象等等(即:當(dāng),@RequestBody 與@RequestParam()可以同時(shí)使用時(shí),原SpringMVC接收參數(shù)的機(jī)制不變,只不過RequestBody 接收的是請求體里面的數(shù)據(jù);而RequestParam接收的是key-value里面的參數(shù),所以它會被切面進(jìn)行處理從而可以用普通元素、數(shù)組、集合、對象等接收)。

即:如果參數(shù)是放在請求體中,傳入后臺的話,那么后臺要用@RequestBody才能接收到;如果不是放在請求體中的話,那么后臺接收前臺傳過來的參數(shù)時(shí),要用@RequestParam來接收,或者形參前什么也不寫也能接收。

  • 注:如果參數(shù)前寫了@RequestParam(xxx),那么前端必須有對應(yīng)的xxx名字才行(不管其是否有值,當(dāng)然可以通過設(shè)置該注解的required屬性來調(diào)節(jié)是否必須傳),如果沒有xxx名的話,那么請求會出錯(cuò),報(bào)400。
  • 注:如果參數(shù)前不寫@RequestParam(xxx)的話,那么就前端可以有可以沒有對應(yīng)的xxx名字才行,如果有xxx名的話,那么就會自動匹配;沒有的話,請求也能正確發(fā)送。
  • 追注:這里與feign消費(fèi)服務(wù)時(shí)不同;feign消費(fèi)服務(wù)時(shí),如果參數(shù)前什么也不寫,那么會被默認(rèn)是@RequestBody的。

如果后端參數(shù)是一個(gè)對象,且該參數(shù)前是以@RequestBody修飾的,那么前端傳遞json參數(shù)時(shí),必須滿足以下要求:

后端@RequestBody注解對應(yīng)的類在將HTTP的輸入流(含請求體)裝配到目標(biāo)類(即:@RequestBody后面的類)時(shí),會根據(jù)json字符串中的key來匹配對應(yīng)實(shí)體類的屬性,如果匹配一致且json中的該key對應(yīng)的值符合(或可轉(zhuǎn)換為),這一條我會在下面詳細(xì)分析,其他的都可簡單略過,但是本文末的核心邏輯代碼以及幾個(gè)結(jié)論一定要看! 實(shí)體類的對應(yīng)屬性的類型要求時(shí),會調(diào)用實(shí)體類的setter方法將值賦給該屬性。

json字符串中,如果value為"“的話,后端對應(yīng)屬性如果是String類型的,那么接受到的就是”",如果是后端屬性的類型是Integer、Double等類型,那么接收到的就是null。

json字符串中,如果value為null的話,后端對應(yīng)收到的就是null。

問題描述

由于項(xiàng)目是前后端分離,因此后臺使用的是spring boot,做成微服務(wù),只暴露接口。接口設(shè)計(jì)風(fēng)格為restful的風(fēng)格,在get請求下,后臺接收參數(shù)的注解為RequestBody時(shí)會報(bào)錯(cuò);在post請求下,后臺接收參數(shù)的注解為RequestParam時(shí)也會報(bào)錯(cuò)。

問題原因

由于spring的RequestParam注解接收的參數(shù)是來自于requestHeader中,即請求頭,也就是在url中,格式為xxx?username=123&password=456,而RequestBody注解接收的參數(shù)則是來自于requestBody中,即請求體中。

解決方法

因此綜上所述,如果為get請求時(shí),后臺接收參數(shù)的注解應(yīng)該為RequestParam,如果為post請求時(shí),則后臺接收參數(shù)的注解就是為RequestBody。附上兩個(gè)例子,截圖如下:

  • get請求

在這里插入圖片描述

  • post請求

在這里插入圖片描述

另外,還有一種應(yīng)用場景,接口規(guī)范為resultful風(fēng)格時(shí),舉個(gè)例子:如果要獲取某個(gè)id下此條問題答案的查詢次數(shù)的話,則后臺就需要動態(tài)獲取參數(shù),其注解為@PathVariable,并且requestMapping中的value應(yīng)為value="/{id}/queryNum",截圖如下:

在這里插入圖片描述

Post請求中@RequestParam和@RequestBody混合使用

如何在一個(gè)@RestController方法中混合使用@RequestParam@RequestBody呢?就像這樣的代碼:

@PostMapping("/scanRecord")
public Response scanRecord(@RequestParam("t") int type, @RequestBody ScanRecord scanRecord) {
    System.out.println("type="+type);
    System.out.println(JSON.toJSONString(scanRecord));
    return Response.ok();
}

@RequestBody用來接收http post請求的body,前端傳入序列化好的json數(shù)據(jù),后端可以解析為json對象(Content-Type需要指定為 application/json)。

@RequestParam用來接收請求url?后面的參數(shù),或者Content-Type為multipart/form-data、application/x-www-form-urlencoded時(shí)的http body數(shù)據(jù)。

所以,如果想要在@RestController的一個(gè)方法中,同時(shí)接收@RequestParam@RequestBody數(shù)據(jù),前端應(yīng)該這樣用:

application/json的方式傳入@RequestBody接收的對象,并且在url?后帶上@RequestParam需要接收的參數(shù)。

post

前端js使用axios提交的話,是這樣的:

function post() {
    var data = {
        id: 1000,
        pn:'華為手機(jī)'
    };
    axios.post('http://localhost:8080/api/scanRecord?t=1', data).then(function (res) {
        
    }).catch(function (error) {

    });
}

最后,附上前端通過axios post提交multipart/form-data、application/x-www-form-urlencoded數(shù)據(jù)的示例代碼:

//form-data方式
function post() {
    var data = new FormData();
    data.append("id", 1000);
    data.append("pn", '華為手機(jī)');
    axios.post('http://localhost:8080/api/scanRecord?t=1', data).then(function (res) {
    }).catch(function (error) {
    });
}

//x-www-form-urlencoded方式
function encodeData(data) {
    var args = [];
    for(var attr in data) {
        args.push(attr+"=" + data[attr]);
    }
    return encodeURI(args.join("&"));
}
function post() {
    var data = {
        id: 1000,
        pn:'華為手機(jī)'
    };
    axios.post('http://localhost:8080/api/scanRecord?t=1', encodeData(data)).then(function (res) {

    }).catch(function (error) {

    });
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot整合SpringDataJPA

    SpringBoot整合SpringDataJPA

    這篇文章主要介紹了SpringBoot整合SpringDataJPA代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-07-07
  • springboot @Valid注解對嵌套類型的校驗(yàn)功能

    springboot @Valid注解對嵌套類型的校驗(yàn)功能

    這篇文章主要介紹了springboot~@Valid注解對嵌套類型的校驗(yàn),主要介紹 @Valid在項(xiàng)目中的使用,需要的朋友可以參考下
    2018-05-05
  • Java Spring AOP之PointCut案例詳解

    Java Spring AOP之PointCut案例詳解

    這篇文章主要介紹了Java Spring AOP之PointCut案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Java中實(shí)現(xiàn)接口限流的方案詳解

    Java中實(shí)現(xiàn)接口限流的方案詳解

    常用的接口限流方案就是計(jì)數(shù)器限流方案、時(shí)間窗口限流方案和令牌桶限流方案等,這些方案的概念大致也知道,但是實(shí)際上也沒有實(shí)現(xiàn)過,所以本文就來自動動手實(shí)踐一下吧
    2023-05-05
  • java簡單自定義異常實(shí)例代碼

    java簡單自定義異常實(shí)例代碼

    這篇文章主要為大家詳細(xì)介紹了java簡單自定義異常實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Java Swing實(shí)現(xiàn)讓窗體居中顯示的方法示例

    Java Swing實(shí)現(xiàn)讓窗體居中顯示的方法示例

    這篇文章主要介紹了Java Swing實(shí)現(xiàn)讓窗體居中顯示的方法,結(jié)合實(shí)例形式分析了swing使用setBounds方法控制窗口布局的相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • Java自定義數(shù)組列表的實(shí)現(xiàn)操作

    Java自定義數(shù)組列表的實(shí)現(xiàn)操作

    這篇文章主要介紹了Java自定義數(shù)組列表的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java實(shí)現(xiàn)小程序簡單五子棋

    Java實(shí)現(xiàn)小程序簡單五子棋

    這篇文章主要介紹了利用Java實(shí)現(xiàn)小程序簡單五子棋,本程序適用于java初學(xué)者鞏固類與對象、事件響應(yīng)、awt包中各種工具的相關(guān)概念以及對邏輯能力的鍛煉,下面來看具體實(shí)現(xiàn)吧
    2021-12-12
  • mybatis參數(shù)類型不匹配錯(cuò)誤argument type mismatch的處理方案

    mybatis參數(shù)類型不匹配錯(cuò)誤argument type mismatch的處理方案

    這篇文章主要介紹了mybatis參數(shù)類型不匹配錯(cuò)誤argument type mismatch的處理方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • JavaMail入門教程之接收郵件(4)

    JavaMail入門教程之接收郵件(4)

    這篇文章主要為大家詳細(xì)介紹了JavaMail入門教程之接收郵件的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12

最新評論

理塘县| 读书| 翼城县| 岳西县| 萨嘎县| 乳源| 城固县| 斗六市| 庄浪县| 台中市| 阿荣旗| 任丘市| 垦利县| 共和县| 茂名市| 郓城县| 武城县| 沁源县| 镇雄县| 湖州市| 安塞县| 吉安市| 伽师县| 义马市| 清徐县| 文昌市| 探索| 咸宁市| 行唐县| 辽宁省| 秭归县| 抚州市| 五大连池市| 关岭| 汝城县| 八宿县| 镇原县| 道孚县| 崇信县| 安丘市| 贵溪市|