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

基于@RequestParam與@RequestBody使用對比

 更新時間:2021年10月22日 09:28:39   作者:香吧香  
這篇文章主要介紹了@RequestParam與@RequestBody的使用對比,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

@RequestParam與@RequestBody對比

@RequestParam

用來處理Content-Type: 為 application/x-www-form-urlencoded編碼的內(nèi)容。

(Http協(xié)議中,如果不指定Content-Type,則默認(rèn)傳遞的參數(shù)就是application/x-www-form-urlencoded類型)

RequestParam可以接受簡單類型的屬性,也可以接受對象類型。

實質(zhì)是將Request.getParameter() 中的Key-Value參數(shù)Map利用Spring的轉(zhuǎn)化機(jī)制ConversionService配置,轉(zhuǎn)化成參數(shù)接收對象或字段。

在Content-Type: application/x-www-form-urlencoded的請求中,

get 方式中queryString的值,和post方式中 body data的值都會被Servlet接受到并轉(zhuǎn)化到Request.getParameter()參數(shù)集中,所以@RequestParam可以獲取的到?! ?/p>

代碼示例:

    @GetMapping("/test-sentinel-resource")
    public String testSentinelResource(@RequestParam(required = false) String a) {
        if (StringUtils.isBlank(a)) {
            throw new IllegalArgumentException("a cannot be blank.");
        }
        return a;
    }

當(dāng) required = false 時,a參數(shù)為可為空,當(dāng) required= true時,a參數(shù)不可為空。

@RequestBody

一般用來處理非Content-Type: application/x-www-form-urlencoded編碼格式的數(shù)據(jù)。

GET請求中,因為沒有HttpEntity,所以@RequestBody并不適用。

POST請求中,通過HttpEntity傳遞的參數(shù),必須要在請求頭中聲明數(shù)據(jù)的類型Content-Type,SpringMVC通過使用HandlerAdapter 配置的HttpMessageConverters來

解析HttpEntity中的數(shù)據(jù),然后綁定到相應(yīng)的bean上。

就application/json類型的數(shù)據(jù)而言,使用注解@RequestBody可以將body里面所有的json數(shù)據(jù)傳到后端,后端再進(jìn)行解析。

  • GET請求中,因為沒有HttpEntity,所以@RequestBody并不適用。
  • POST請求中,通過HttpEntity傳遞的參數(shù),必須要在請求頭中聲明數(shù)據(jù)的類型Content-Type,SpringMVC通過使用

HandlerAdapter 配置的HttpMessageConverters來解析HttpEntity中的數(shù)據(jù),然后綁定到相應(yīng)的bean上。

@PostMapping("/create/user")
    public UserInfo createUser(@RequestBody CreateUserRequest request) {
        return userService.createUser(request);
}

小結(jié)一下:

1. form-data、x-www-form-urlencoded:不可以用@RequestBody;

2. application/json:json字符串部分可以用@RequestBody;url中的?后面參數(shù)可以用@RequestParam

3. get請求中不能用@RequestBody注解

@requestBody 與@requestparam;@requestBody的加與不加的區(qū)別

一、首先說明@requestBody與@requestParam的區(qū)別

spring的RequestParam注解接收的參數(shù)是來自于requestHeader中,即請求頭。都是用來獲取請求路徑(url )中的動態(tài)參數(shù)。也就是在url中,格式為xxx?username=123&password=456。功能與@pathvarible。

RequestBody注解接收的參數(shù)則是來自于requestBody中,即請求體中。

知識點:

二、Content-Type

內(nèi)容類型,一般是指網(wǎng)頁中存在的Content-Type,用于定義網(wǎng)絡(luò)文件的類型和網(wǎng)頁的編碼,決定瀏覽器將以什么形式、什么編碼讀取這個文件,這就是經(jīng)??吹揭恍〢sp網(wǎng)頁點擊的結(jié)果卻是下載到的一個文件或一張圖片的原因。

三、問題,@requestBody到底在什么時候?qū)懪c不寫呢

看現(xiàn)象如下:發(fā)現(xiàn)ajaxDate有若干種寫法。

(1)直接寫名傳參。如下:

打印ajaxDate如下格式:

雖然打印結(jié)果是json對象式,但最后會轉(zhuǎn)為key1=value1&key2=value2的格式提交到后臺 ,不需要加@requestBody。

(2)serializeble實例化表單

打印結(jié)果如下:

表單 格式使用的是默認(rèn)的ContentType類型application/x-www-form-urlencoded,格式為key1=value1&key2=value2提交到后臺 ,不需要加@requestBody。

(3)contentType轉(zhuǎn)化之后,需要加@requestBody,controller才能接收到數(shù)據(jù)。

ajaxDate打印結(jié)果如下:

post和get功能相同。

前臺將ajaxData轉(zhuǎn)為json字符串,后臺必須加@RequestBody注解的屬性才能自定映射到值。

為什么有的需要加@requestBody,有的不需要。加與不加的區(qū)別如下:

使用@requestBody.當(dāng)請求content_type為:application/json類型的請求,數(shù)據(jù)類型為json時, json格式如下:{"aaa":"111","bbb":"222"}

不使用@requestBody.當(dāng)請求content_type為:application/x-www-form-urlencoded類型的或multipart/form-data時,數(shù)據(jù)格式為aaa=111&bbb=222。

JQuery的$.ajax(url,[settings])

1.默認(rèn)的ContentType的值為:application/x-www-form-urlencoded; charset=UTF-8 此格式為表單提交格式,數(shù)據(jù)為key1=value1&key2=value2的格式 。圖二serrializeble,只用的是默認(rèn)contentType類型。

2.雖然ajax的data屬性值格式為:{key1:value1,key2:value2},但最后會轉(zhuǎn)為key1=value1&key2=value2的格式提交到后臺 。

圖二,雖然打印出的結(jié)果是不是&格式的,但是會轉(zhuǎn)化。

3.如果ajax要和springmvc交互,要使用key1=value1&key2=value2的格式,后臺springmvc只需要定義對象或者參數(shù)就行了,會自動映射。

4.如果springmvc的參數(shù)有@RequestBody注解(接收json**字符串**格式數(shù)據(jù)),ajax必須將date屬性值轉(zhuǎn)為json字符串,不能為json對象(js對象,會自動轉(zhuǎn)為key=value形式)。并且,修改contentType的值為:application/json; charset=UTF-8,這樣加了@RequestBody注解的屬性才能自定映射到值。

5.使用在進(jìn)行圖片或者文件上傳時使用 multipart/form-data 類型時、 數(shù)據(jù)會自動進(jìn)行映射不要添加任何注解。

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

相關(guān)文章

  • 基于Java實現(xiàn)抽獎系統(tǒng)

    基于Java實現(xiàn)抽獎系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了基于Java實現(xiàn)抽獎系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • springboot整合webservice使用簡單案例總結(jié)

    springboot整合webservice使用簡單案例總結(jié)

    WebService是一個SOA(面向服務(wù)的編程)的架構(gòu),它是不依賴于語言,平臺等,可以實現(xiàn)不同的語言間的相互調(diào)用,下面這篇文章主要給大家介紹了關(guān)于springboot整合webservice使用的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • java迭代器基礎(chǔ)知識點總結(jié)

    java迭代器基礎(chǔ)知識點總結(jié)

    在本篇內(nèi)容里小編給大家整理了一篇關(guān)于java迭代器基礎(chǔ)知識點總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-01-01
  • SpringBoot連接MySql數(shù)據(jù)庫的原理及代碼示例

    SpringBoot連接MySql數(shù)據(jù)庫的原理及代碼示例

    SpringBoot是一款流行的Java開發(fā)框架,它可以輕松地連接各種類型的數(shù)據(jù)庫,包括關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫,本文將介紹SpringBoot是如何連接數(shù)據(jù)庫的,包括其原理和代碼示例,需要的朋友可以參考下
    2023-07-07
  • Spring ApplicationListener的使用詳解

    Spring ApplicationListener的使用詳解

    這篇文章主要介紹了Spring ApplicationListener的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 一文詳細(xì)講解Java的父子繼承、方法的重寫與super關(guān)鍵字

    一文詳細(xì)講解Java的父子繼承、方法的重寫與super關(guān)鍵字

    Java中繼承是通過extends關(guān)鍵字實現(xiàn),幫助減少代碼重復(fù),提高復(fù)用性,子類繼承父類的屬性和方法,但私有成員除外,方法重寫(override)使子類改造父類方法以適應(yīng)新功能,這篇文章主要介紹了Java的父子繼承、方法的重寫與super關(guān)鍵字的相關(guān)資料,需要的朋友可以參考下
    2024-10-10
  • SpringBoot+MinIO+KKFileView實現(xiàn)文件預(yù)覽功能

    SpringBoot+MinIO+KKFileView實現(xiàn)文件預(yù)覽功能

    本文主要介紹了使用SpringBoot、MinIO和KKFileView實現(xiàn)文件上傳和在線預(yù)覽功能,通過配置MinIO存儲文件,并使用KKFileView生成預(yù)覽鏈接,感興趣的可以了解一下
    2024-11-11
  • SpringBoot使用AOP+注解實現(xiàn)簡單的權(quán)限驗證的方法

    SpringBoot使用AOP+注解實現(xiàn)簡單的權(quán)限驗證的方法

    這篇文章主要介紹了SpringBoot使用AOP+注解實現(xiàn)簡單的權(quán)限驗證的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • mybatis分頁效果實現(xiàn)代碼

    mybatis分頁效果實現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了mybatis分頁效果的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Java 實現(xiàn)并發(fā)的幾種方式小結(jié)

    Java 實現(xiàn)并發(fā)的幾種方式小結(jié)

    這篇文章主要介紹了Java 實現(xiàn)并發(fā)的幾種方式小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05

最新評論

柘荣县| 馆陶县| 石林| 马尔康县| 城口县| 苏尼特左旗| 滦南县| 宁南县| 行唐县| 清水县| 通辽市| 石景山区| 宿迁市| 隆子县| 梧州市| 前郭尔| 牟定县| 巩义市| 武汉市| 岐山县| 台北县| 聂拉木县| 泉州市| 宁晋县| 山阴县| 武隆县| 通化市| 惠安县| 务川| 莱州市| 霞浦县| 东丽区| 白河县| 始兴县| 新泰市| 博客| 平顺县| 于都县| 南郑县| 安龙县| 沈丘县|