国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - 基于@RequestParam與@RequestBody使用對比

基于@RequestParam與@RequestBody使用對比

2022-02-25 00:38香吧香 Java教程

這篇文章主要介紹了@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可以接受簡單類型的屬性,也可以接受對象類型。

實(shí)質(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可以獲取的到。  

代碼示例:

  @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請求中,因?yàn)闆]有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請求中,因?yàn)闆]有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中,即請求體中。

知識點(diǎn):

二、Content-Type

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

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

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

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

基于@RequestParam與@RequestBody使用對比

打印ajaxDate如下格式:

基于@RequestParam與@RequestBody使用對比

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

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

基于@RequestParam與@RequestBody使用對比

打印結(jié)果如下:

基于@RequestParam與@RequestBody使用對比

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

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

基于@RequestParam與@RequestBody使用對比

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

基于@RequestParam與@RequestBody使用對比

post和get功能相同。

基于@RequestParam與@RequestBody使用對比

前臺將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)驗(yàn),希望能給大家一個參考,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://www.cnblogs.com/zjdxr-up/p/13227913.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 亚洲免费在线播放 | 色接久久 | 久久久夜夜夜 | 亚洲国产精品久久久久 | 欧美在线观看www | 伊人欧美在线 | 亚洲日本va中文字幕 | 国产综合精品一区二区三区 | 久久综合九九 | 国产精品成人在线观看 | 韩日中文字幕 | 午夜视频网站 | 天天躁人人躁人人躁狂躁 | 精品一区二区久久 | 性色国产 | 亚洲伦理影院 | 欧美日韩国产在线播放 | 免费一区二区 | 日韩在线一区二区三区 | 免费av在线 | 日本精品1区2区 | 久久爱电影 | 国产综合精品一区二区三区 | 欧美日一本 | 亚洲一区精品在线 | 亚洲国产综合在线观看 | 午夜电影网址 | 国产精品一区二区不卡 | 男人天堂视频网 | 国精品一区二区三区 | 天天干天天草 | 综合99| 日韩中文字幕在线视频 | 国产精品影视 | 国产一区二区三区久久久久久久久 | 国产91精品久久久久 | 一区二区在线 | 国产一区二区三区欧美 | 久久男人精品 | 精品国产青草久久久久福利 | 久久久精品国产亚洲 |