欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于@RequestParam與@RequestBody使用對(duì)比

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

@RequestParam與@RequestBody對(duì)比

@RequestParam

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

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

RequestParam可以接受簡(jiǎn)單類型的屬性,也可以接受對(duì)象類型。

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

在Content-Type: application/x-www-form-urlencoded的請(qǐng)求中,

get 方式中queryString的值,和post方式中 body data的值都會(huì)被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 時(shí),a參數(shù)為可為空,當(dāng) required= true時(shí),a參數(shù)不可為空。

@RequestBody

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

GET請(qǐng)求中,因?yàn)闆](méi)有HttpEntity,所以@RequestBody并不適用。

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

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

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

  • GET請(qǐng)求中,因?yàn)闆](méi)有HttpEntity,所以@RequestBody并不適用。
  • POST請(qǐng)求中,通過(guò)HttpEntity傳遞的參數(shù),必須要在請(qǐng)求頭中聲明數(shù)據(jù)的類型Content-Type,SpringMVC通過(guò)使用

HandlerAdapter 配置的HttpMessageConverters來(lái)解析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請(qǐng)求中不能用@RequestBody注解

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

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

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

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

知識(shí)點(diǎn):

二、Content-Type

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

三、問(wèn)題,@requestBody到底在什么時(shí)候?qū)懪c不寫呢

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

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

打印ajaxDate如下格式:

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

(2)serializeble實(shí)例化表單

打印結(jié)果如下:

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

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

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

post和get功能相同。

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

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

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

不使用@requestBody.當(dāng)請(qǐng)求content_type為:application/x-www-form-urlencoded類型的或multipart/form-data時(shí),數(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},但最后會(huì)轉(zhuǎn)為key1=value1&key2=value2的格式提交到后臺(tái) 。

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

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

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

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

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

相關(guān)文章

  • Spring Boot整合RabbitMQ實(shí)例(Topic模式)

    Spring Boot整合RabbitMQ實(shí)例(Topic模式)

    Topic Exchange 轉(zhuǎn)發(fā)消息主要是根據(jù)通配符。接下來(lái)通過(guò)本文給大家分享Spring Boot整合RabbitMQ實(shí)例(Topic模式),需要的朋友參考下吧
    2017-04-04
  • SpringBoot整合Druid、Redis的示例詳解

    SpringBoot整合Druid、Redis的示例詳解

    Druid 是阿里巴巴開(kāi)源平臺(tái)上一個(gè)數(shù)據(jù)庫(kù)連接池實(shí)現(xiàn),結(jié)合了 C3P0、DBCP 等 DB 池的優(yōu)點(diǎn),同時(shí)加入了日志監(jiān)控。這篇文章主要介紹了SpringBoot整合Druid、Redis的實(shí)例詳解,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • 零基礎(chǔ)寫Java知乎爬蟲之抓取知乎答案

    零基礎(chǔ)寫Java知乎爬蟲之抓取知乎答案

    上篇文章我們已經(jīng)能把知乎的問(wèn)題抓出來(lái)了,但是答案還木有抓出來(lái)。這一回合,我們就連著把答案也一起從網(wǎng)站中摳出來(lái)=。=
    2014-11-11
  • 優(yōu)化SpringBoot程序啟動(dòng)速度的實(shí)現(xiàn)

    優(yōu)化SpringBoot程序啟動(dòng)速度的實(shí)現(xiàn)

    本文主要介紹了優(yōu)化SpringBoot程序啟動(dòng)速度的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • SpringBoot整合OpenCV的實(shí)現(xiàn)示例

    SpringBoot整合OpenCV的實(shí)現(xiàn)示例

    這篇文章主要介紹了SpringBoot整合OpenCV的實(shí)現(xiàn)示例。文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 舉例詳解Java編程中HashMap的初始化以及遍歷的方法

    舉例詳解Java編程中HashMap的初始化以及遍歷的方法

    這篇文章主要介紹了Java編程中HashMap的初始化以及遍歷的方法,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • java數(shù)據(jù)類型與變量的安全性介紹

    java數(shù)據(jù)類型與變量的安全性介紹

    這篇文章主要介紹了java數(shù)據(jù)類型與變量的安全性介紹,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • java dom4j解析xml用到的幾個(gè)方法

    java dom4j解析xml用到的幾個(gè)方法

    這篇文章主要介紹了java dom4j解析xml用到的幾個(gè)方法,有需要的朋友可以參考一下
    2013-12-12
  • JUnit單元測(cè)試入門必看篇

    JUnit單元測(cè)試入門必看篇

    下面小編就為大家分享一篇JUnit單元測(cè)試入門必看篇,對(duì)新手而言有很好的參考價(jià)值,希望對(duì)大家有所幫助
    2017-11-11
  • 如何解決java.lang.ClassNotFoundException: com.mysql.jdbc.Driver問(wèn)題

    如何解決java.lang.ClassNotFoundException: com.mysql.jdbc.Dr

    這篇文章主要介紹了如何解決java.lang.ClassNotFoundException: com.mysql.jdbc.Driver問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評(píng)論