亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring中@RequestParam與@RequestBody的使用場(chǎng)景詳解

 更新時(shí)間:2023年12月04日 09:47:36   作者:制造bug的鍵盤鋼琴師  
這篇文章主要介紹了Spring中@RequestParam與@RequestBody的使用場(chǎng)景詳解,注解@RequestParam接收的參數(shù)是來(lái)自requestHeader中即請(qǐng)求頭或body請(qǐng)求體,通常用于GET請(qǐng)求,比如常見(jiàn)的url等,需要的朋友可以參考下

一、前言

一直有這么一個(gè)疑問(wèn):在使用postman工具測(cè)試api接口的時(shí)候,如何使用 json 字符串傳值呢,而不是使用 x-www-form-urlencoded 類型,畢竟通過(guò) key-value 傳值是有局限性的。假如我要測(cè)試批量插入數(shù)據(jù)的接口呢,使用 x-www-form-urlencoded 方法根本就不適用于這種場(chǎng)景。

那么如何通過(guò)postman工具使用json字符串傳值呢,這里就引申出來(lái)了spring的兩個(gè)注解:

  • @RequestParam
  • @RequestBody

總而言之,這兩個(gè)注解都可以在后臺(tái)接收參數(shù),但是使用場(chǎng)景不一樣。繼續(xù)往下看

二、@RequestParam

先介紹一下@RequestParam的使用場(chǎng)景:

注解@RequestParam接收的參數(shù)是來(lái)自requestHeader中即請(qǐng)求頭或body(請(qǐng)求體)。

通常用于GET請(qǐng)求,比如常見(jiàn)的url://localhost:8081/spring-boot-study/novel/findByAuthorAndType?author=唐家三少&type=已完結(jié),其在Controller 層的寫法如下圖所示:

在這里插入圖片描述

@RequestParam有三個(gè)配置參數(shù):

  • required 表示是否必須,默認(rèn)為 true,必須。
  • defaultValue 可設(shè)置請(qǐng)求參數(shù)的默認(rèn)值。
  • value 為接收url的參數(shù)名(相當(dāng)于key值)。

@RequestParam用來(lái)處理 Content-Type 為 application/x-www-form-urlencoded 編碼的內(nèi)容,Content-Type默認(rèn)為該屬性。

@RequestParam也可用于其它類型的請(qǐng)求,例如:POST、DELETE等請(qǐng)求。比如向表中插入單條數(shù)據(jù),Controller 層的寫法如下圖所示:

在這里插入圖片描述

由于@RequestParam是用來(lái)處理 Content-Type 為 application/x-www-form-urlencoded 編碼的內(nèi)容的,所以在postman中,要選擇body的類型為 x-www-form-urlencoded,這樣在headers中就自動(dòng)變?yōu)榱?Content-Type : application/x-www-form-urlencoded 編碼格式。

如下圖所示:

在這里插入圖片描述

但是這樣不支持批量插入數(shù)據(jù)啊,如果改用 json 字符串來(lái)傳值的話,類型設(shè)置為 application/json,點(diǎn)擊發(fā)送的話,會(huì)報(bào)錯(cuò),后臺(tái)接收不到值,為 null。

這時(shí)候,注解@RequestBody就派上用場(chǎng)了。

三、@RequestBody

先介紹一下@RequestBody的使用場(chǎng)景:

注解@RequestBody接收的參數(shù)是來(lái)自requestBody中,即請(qǐng)求體。

一般用于處理非 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)行解析。

3.1 向表中批量插入數(shù)據(jù)

舉個(gè)批量插入數(shù)據(jù)的例子,Controller層的寫法如下圖所示:

在這里插入圖片描述

由于@RequestBody可用來(lái)處理 Content-Type 為 application/json 編碼的內(nèi)容,所以在postman中,選擇body的類型為row -> JSON(application/json),這樣在 Headers 中也會(huì)自動(dòng)變?yōu)?Content-Type : application/json 編碼格式。body內(nèi)的數(shù)據(jù)如下圖所示:

在這里插入圖片描述

批量向表中插入兩條數(shù)據(jù),這里的 saveBatchNovel()方法已經(jīng)封裝了 JPA的 saveAll() 方法。body 里面的 json 語(yǔ)句的 key 值要與后端實(shí)體類的屬性一一對(duì)應(yīng)。

注意:前端使用$.ajax的話,一定要指定 contentType: “application/json;charset=utf-8;”,默認(rèn)為 application/x-www-form-urlencoded。

3.2 后端解析json數(shù)據(jù)

上述示例是傳遞到實(shí)體類中的具體寫法,那么如果傳遞到非實(shí)體類中,body里面的json數(shù)據(jù)需要怎么解析呢?我們?cè)賮?lái)看下面這個(gè)例子:

在body中,我們還是輸入上面的json數(shù)據(jù),根據(jù)分析,上面的json數(shù)據(jù)是一個(gè)List數(shù)組內(nèi)嵌套著map對(duì)象,那么在后臺(tái)的接收形式可寫為 List<Map<String, String>>,具體代碼如下圖所示:

在這里插入圖片描述

在這里插入圖片描述

控制臺(tái)輸出:

在這里插入圖片描述

四、總結(jié)

注解@RequestParam接收的參數(shù)是來(lái)自requestHeader中,即請(qǐng)求頭。

通常用于GET請(qǐng)求,像POST、DELETE等其它類型的請(qǐng)求也可以使用。

注解@RequestBody接收的參數(shù)是來(lái)自requestBody中,即請(qǐng)求體。

一般用于處理非 Content-Type: application/x-www-form-urlencoded編碼格式的數(shù)據(jù),比如:application/json、application/xml等類型的數(shù)據(jù)。通常用于接收POST、DELETE等類型的請(qǐng)求數(shù)據(jù),GET類型也可以適用。

**重點(diǎn)補(bǔ)充:

**在使用注解@RequestParam的時(shí)候【不加注解的時(shí)候效果與@RequestParam類似】,在body data中我們不能傳json字符串類型的參數(shù),否則對(duì)象中是接收不到傳遞參數(shù)相應(yīng)的值。

相應(yīng)的在@RequestBody注解標(biāo)記的形式上傳遞表格參數(shù)則會(huì)報(bào)錯(cuò)。

postman模擬發(fā)送請(qǐng)求【@RequestParam接受json字符串】:

在這里插入圖片描述

debug斷點(diǎn)后頁(yè)面展示的結(jié)果:

在這里插入圖片描述

postman模擬發(fā)送請(qǐng)求【@RequestBody接受application/x-www-form-urlencoded表格參數(shù)】:

在這里插入圖片描述

代碼以及報(bào)錯(cuò)顯示:

在這里插入圖片描述

到此這篇關(guān)于Spring中@RequestParam與@RequestBody的使用場(chǎng)景詳解的文章就介紹到這了,更多相關(guān)@RequestParam與@RequestBody注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JAVA+Struts2獲取服務(wù)器地址的方法

    JAVA+Struts2獲取服務(wù)器地址的方法

    這篇文章主要介紹了JAVA+Struts2獲取服務(wù)器地址的方法,是Struts2的一個(gè)簡(jiǎn)單應(yīng)用,具有一定的借鑒與參考價(jià)值,需要的朋友可以參考下
    2014-11-11
  • java DataInputStream和DataOutputStream詳解及實(shí)例代碼

    java DataInputStream和DataOutputStream詳解及實(shí)例代碼

    這篇文章主要介紹了java DataInputStream和DataOutputStream詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • MyBatis新增數(shù)據(jù)并返回主鍵值方式

    MyBatis新增數(shù)據(jù)并返回主鍵值方式

    這篇文章主要介紹了MyBatis新增數(shù)據(jù)并返回主鍵值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java8新日期時(shí)間API的20個(gè)使用示例

    Java8新日期時(shí)間API的20個(gè)使用示例

    這篇文章主要介紹了Java8新日期時(shí)間API的20個(gè)使用示例,為了學(xué)習(xí)Java 8的這個(gè)新庫(kù),這里我創(chuàng)建了20個(gè)以任務(wù)為導(dǎo)向的例子,需要的朋友可以參考下
    2015-03-03
  • SpringBoot Application的exclude不生效問(wèn)題及排查

    SpringBoot Application的exclude不生效問(wèn)題及排查

    這篇文章主要介紹了SpringBoot Application的exclude不生效問(wèn)題及排查,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java設(shè)計(jì)模塊系列之書(shū)店管理系統(tǒng)單機(jī)版(一)

    Java設(shè)計(jì)模塊系列之書(shū)店管理系統(tǒng)單機(jī)版(一)

    這篇文章主要為大家詳細(xì)介紹了Java單機(jī)版的書(shū)店管理系統(tǒng)設(shè)計(jì)模塊和思想第一章,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Java之JFrame輸出Helloworld實(shí)例

    Java之JFrame輸出Helloworld實(shí)例

    這篇文章主要介紹了Java之JFrame輸出Helloworld的方法,以輸出Helloworld的實(shí)例分析了JFrame的簡(jiǎn)單入門技巧,需要的朋友可以參考下
    2015-02-02
  • RabbitMQ延時(shí)隊(duì)列詳解與Java代碼實(shí)現(xiàn)

    RabbitMQ延時(shí)隊(duì)列詳解與Java代碼實(shí)現(xiàn)

    這篇文章主要介紹了RabbitMQ延時(shí)隊(duì)列詳解與Java代碼實(shí)現(xiàn),RabbitMQ 延時(shí)隊(duì)列是指消息在發(fā)送到隊(duì)列后,并不立即被消費(fèi)者消費(fèi),而是等待一段時(shí)間后再被消費(fèi)者消費(fèi)。這種隊(duì)列通常用于實(shí)現(xiàn)定時(shí)任務(wù),需要的朋友可以參考下
    2023-04-04
  • Java8中對(duì)于LocalDateTime的序列化和反序列化問(wèn)題

    Java8中對(duì)于LocalDateTime的序列化和反序列化問(wèn)題

    這篇文章主要介紹了Java8中對(duì)于LocalDateTime的序列化和反序列化問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Java解壓RAR文件的三種方式

    Java解壓RAR文件的三種方式

    這篇文章主要給大家介紹了關(guān)于Java解壓RAR文件的三種方式,Java自身并不支持解壓RAR文件,需要使用第三方庫(kù)來(lái)實(shí)現(xiàn),文中給出了詳細(xì)的示例代碼,需要的朋友可以參考下
    2023-07-07

最新評(píng)論