一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

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

基于@RequestParam與@RequestBody使用對比

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

這篇文章主要介紹了@RequestParam與@RequestBody的使用對比,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

@RequestParam與@RequestBody對比

@RequestParam

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

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

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

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

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

get 方式中queryString的值,和post方式中 body data的值都會被Servlet接受到并轉化到Request.getParameter()參數集中,所以@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;
  }

當 required = false 時,a參數為可為空,當 required= true時,a參數不可為空。

@RequestBody

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

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

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

解析HttpEntity中的數據,然后綁定到相應的bean上。

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

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

HandlerAdapter 配置的HttpMessageConverters來解析HttpEntity中的數據,然后綁定到相應的bean上。

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

小結一下:

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

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

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

 

@requestBody 與@requestparam;@requestBody的加與不加的區別

一、首先說明@requestBody與@requestParam的區別

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

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

知識點:

二、Content-Type

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

三、問題,@requestBody到底在什么時候寫與不寫呢

看現象如下:發現ajaxDate有若干種寫法。

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

基于@RequestParam與@RequestBody使用對比

打印ajaxDate如下格式:

基于@RequestParam與@RequestBody使用對比

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

(2)serializeble實例化表單

基于@RequestParam與@RequestBody使用對比

打印結果如下:

基于@RequestParam與@RequestBody使用對比

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

(3)contentType轉化之后,需要加@requestBody,controller才能接收到數據。

基于@RequestParam與@RequestBody使用對比

ajaxDate打印結果如下:

基于@RequestParam與@RequestBody使用對比

post和get功能相同。

基于@RequestParam與@RequestBody使用對比

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

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

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

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

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

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

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

圖二,雖然打印出的結果是不是&格式的,但是會轉化。

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

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

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

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人精品一区二区三区 | 特级非洲黑人一级毛片 | 小鸟酱视频在线观看 | 日本公乱妇视频 | 艾秋麻豆果冻剧传媒在线播放 | 午夜一个人在线观看完整版 | 无码AV免费精品一区二区三区 | 精品亚洲一区二区三区在线播放 | 国产-第1页-草草影院 | 天天色天天综合 | 久久国产加勒比精品无码 | 午夜dj影院在线观看完整版 | 亚洲欧美另类在线观看 | 欧美日韩在线观看区一二 | 精品一二三区久久AAA片 | 大陆性出航 | 日日爱669| 亚洲国产在线午夜视频无 | 日本午夜视频 | 男人的j插入女人的p | free性泰国女人hd | 极品美女写真菠萝蜜视频 | 99久久免费看国产精品 | 亚洲天堂成人在线观看 | 奇米网7777 | 国内精品国语自产拍在线观看55 | 色综合91久久精品中文字幕 | 国产综合视频 | 免费黄色小说 | 男女啪啪gif| 免费一级特黄特色大片∵黄 | 插得好舒服 | 无码人妻视频又大又粗欧美 | 欧美男同猛男 videos 同性 | 久久精品视在线观看2 | 公妇乱淫 | 污丝瓜视频 | 26uuu久久| 冰山美人调教耻辱h | 免费看国产一级特黄aa大片 | 日韩成人在线视频 |