日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

@requestbody和@requestparam到底什么作用

發布時間:2025/3/12 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 @requestbody和@requestparam到底什么作用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、什么都不寫

GET

可以自動封裝為對象模型,沒有的數值自動為0值

POST

請求體里面放了數據,但是還是使用了RequestParam里的數據

總結:

在不使用注解的情況下,相當于默認使用了RequestParam里的數據 (這種理解是錯誤的,真實的原因參考下面段落 有一個有趣的現象 ),而且可以自動封裝為對象模型,沒有的數據也不會報錯,而是設為0值
post請求時,如果不使用 contentType:'application/json;charset=utf-8',參數還是可以在RequestParam里獲取,所以也可以封裝為對象模型。

2、使用@RequestParam

GET POST

結果都是400:Required Student parameter ‘student’ is not present
使用@RequsetParam時,無法封裝對象模型,只能接受簡單數據類型(String int 等)。
值得注意的是如果使用@RequestParam(required = false),在沒有對應數據時不會報400錯誤,而是賦為0值。

3、使用@RequestBody

GET


結果400:The request sent by the client was syntactically incorrect.
使用get請求沒有請求體,而使用@RequestBody獲取的肯定是請求體里的數據

POST


結果415:The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.
因為Http協議中,如果不指定Content-Type,則默認傳遞的參數就是application/x-www-form-urlencoded類型。使用@RequestBody必須使用 contentType:'application/json;charset=utf-8' ,且只能是post請求。

結果:{“name”:“lisi”,“no”:“001”,“age”:12}
將Content-Type手動設置為json格式,可以把請求體里的json字符串,讀出來封裝為對象模型。

總結

不寫注解,默認使用RequestParam里的數據,而且沒有的話也不報錯,讀為0值;
@RequestParam使用的是RequestParam里的數據。key和變量名必須一致,否則報錯。無法封裝對象模型接受參數;
@RequestBody使用的是請求體里的數據,必須使用json格式,需要在請求體里面設置Content-Type:application/json;


結果:{“name”:“zhangsan”,“no”:“001”,“age”:12}
使用了RequestParam的name,RequestBody的no和age。

另外


結果與上方一致。{“name”:“zhangsan”,“no”:“001”,“age”:12}
因為url路徑后面的值都會被Servlet接受到并轉化到Request.getParameter()參數集中(HttpServletRequest request),所以@RequestParam可以獲取的到。即request.getParameter(" ")能得到的數據使用@RequestParam也可以得到

-----------------分割線------------------------------------------------------------------------------

之前理解的太片面。工作中有遇到了上面結論解釋不了的情況,使用post請求,但是參數能從RequestParam里面獲取。不得不再次開始查資料。
首先應該理解:Query String Parameters、Form Data、Request Payload的區別

參考:https://blog.csdn.net/c_liufeng/article/details/89228115

發起一次POST請求時,若未指定content-type,則默認content-type為application/x-www-form-urlencoded。即參數會以Form Data的形式進行傳遞,不會顯式出現在請求url中。請求參數將被放置于request.paramter,解析成map。在控制臺看到,數據就是在Form Data中。form表單中數據被編碼為key/value格式發送到服務器(表單默認的提交數據的格式為application/x-www-form-urlencoded)。
所以url、Query String Parameters、Form Data里的參數都可以通過@RequestParam或者request.getParameter(" ")獲取。

@RequestBody

@RequestBody是將post請求中內容轉為一個整體對象。
@RequestBody的解析有兩個條件:

  • POST請求中content的值必須為json格式(存儲形式可以是字符串,也可以是byte數組); contentType:'application/json;charset=utf-8'
  • @RequestBody注解的參數類型必須是完全可以接收參數值的類型,比如:Map,JSONObject,或者對應的JavaBean;
    所以Integer類型不能作為@RequestBody注解的參數類型
  • @RequestParam

    這種方式只用在Content-Type=application/x-www-form-urlencoded這種情況下才能使用,sevlet將Body中的key-value轉成Param。
    有一個有趣的現象

  • 如果Content-Type=application/x-www-form-urlencoded,url和body中有相同的屬性名。如果是String類型,則兩個值會被拼接,其他類型取的是URL拼接的參數。
  • $.ajax({type: "post",contentType: "application/x-www-form-urlencoded",url: "xhh/add.do?name=zhangsan&age=90",data: data.field,dataType: "json",success: function (data) {alert(data.toString());} @RequestMapping(value = "/add.do", method = {RequestMethod.POST})public String test(@RequestParam("name") String name,@RequestParam("age") int age){System.out.println("name:" + name);System.out.println("age" + age);return name;}


    后臺打印結果:

    name:zhangsan,qqq age:90
  • 如果Content-Type=mutipart/form-data,Body中加入參數和URL后面拼接參數一起做Post請求,都可以被加載到Param中,如果是同名的,只取用form-data中的。
  • $.ajax({ type: "post", contentType: "mutipart/form-data", url: "xhh/add.do?name=zhangsan&age=90", data: data.field, dataType: "json", success: function (data) {alert(data.toString()); }

    控制層代碼同上
    前端傳參同上

    后臺打印結果:

    name:zhangsan age:90
  • get請求,結果與上面2個并不完全相同,至于是獲取url數據還是Query String Parameters里數據,還是拼接,具體情況再具體測吧,總之避免這種情況出現最好。
  • application/x-www-form-urlencoded : 表單中默認的ContentType,form表單數據被編碼為key/value格式發送到服務器(表單默認的提交數據的格式)

    通用HttpServletRequest

    和Get方式一樣,這是個通用的方式。這個也可以和URL拼接的一起搭,但是沒有RequestParam的String類型值被拼接問題,優先級 form-data高于URL拼接高于x-www-form-urlencoded。

    參考:https://blog.csdn.net/qq_43194157/article/details/107617370

    后端如果用springMVC的@RequestBody注解的話,則只能接收Json對象的字符串,不能接收Json對象,用 JSON.stringify(data)的方式將對象變成字符串,同時ajax請求也要指定dataType: “json”,contentType:“application/json” ,這樣就能用@RequestBody注解綁定對象或者List集合.

    參考:https://blog.csdn.net/weixin_38676276/article/details/87630740

    這次得出的結論:
    1.@RequestBody只能用來接受Json格式的字符串,前端必須使用 contentType:'application/json;charset=utf-8' ,必須是post請求。
    2.@RequestParam或者沒有注解獲取的都是requestParam(除了contentType:'application/json;charset=utf-8'時,其他情況下參數都會被封裝在requestParam里。如果url和body里面都有重名的參數,參考 有一個有趣的現象 那里)里的數據。不管是對象模型里的屬性(即使用對象模型接收參數的時候),還是基本數據類型都一樣。
    區別是沒有注解的情況下相當使用了@RequestParam(required = false) ,不傳不會報錯,給0值。

    總結

    以上是生活随笔為你收集整理的@requestbody和@requestparam到底什么作用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产小精品 | 日韩黄色成人 | 一本大道熟女人妻中文字幕在线 | 91精品久久久久久久久 | 国产伦精品一区二区三区88av | 日本亲近相奷中文字幕 | 日本美女裸体视频 | 欧美99| 少妇人妻好深好紧精品无码 | 麻豆视频网址 | 国产一级片a | 91抖音在线观看 | 国产人妻aⅴ色偷 | 精品人妻一区二区三区视频 | 在线免费观看污网站 | 69视频在线播放 | 超碰人操 | 九九九九精品九九九九 | 捆绑凌虐一区二区三区 | 草莓视频成人在线 | 久久潮| 97在线影院 | 亚洲性生活视频 | 午夜在线观看免费视频 | 亚洲图片偷拍区 | 九九九免费视频 | 亚洲最大成人网色 | jizz欧美性23 | 一本—道久久a久久精品蜜桃 | 香蕉视频亚洲一级 | 国产伦精品一区二区三区免费迷 | 麻豆伊甸园 | 国产精品久久午夜夜伦鲁鲁 | 午夜三级福利 | 免费性片| www.奇米| 思思精品视频 | 亚洲视频一区二区三区在线观看 | 久操青青 | 激情久久婷婷 | 亚洲作爱视频 | 欧美又大粗又爽又黄大片视频 | 国产精品免费一区二区三区四区 | 嫩草影院一区二区 | 四虎影院黄色 | 爽天天天天天天天 | 国产一级爽片 | 成人黄网免费观看视频 | 国产精品久久久久久白浆 | 韩国一区二区视频 | 精品成人免费一区二区在线播放 | 91亚洲免费 | 在线欧美日韩 | 在哪看毛片 | 蜜桃精品噜噜噜成人av | 少妇视频在线 | 精品久久一二三区 | 狠狠干精品 | 人妻 日韩精品 中文字幕 | 日本精品视频在线观看 | 日韩视频一二三 | 亚洲 激情 | 久久成人综合网 | 最近免费中文字幕 | 成人在线影视 | 高清视频免费在线观看 | 亚洲毛片在线 | 131美女爱做视频 | 驯服少爷漫画免费观看下拉式漫画 | 玖玖视频| 香蕉视频在线看 | 91精品国产91久久久久久 | 中国zzji女人高潮免费 | 好吊色综合 | 国产毛片精品国产一区二区三区 | 亚洲一区自拍偷拍 | 四虎音影| 国产国语性生话播放 | 精品人妻午夜一区二区三区四区 | 一级片在线播放 | xx性欧美肥妇精品久久久久久 | 亚洲国产成人精品女人久久久 | 超碰黄色| 操她视频在线观看 | 丝袜在线视频 | 干极品美女 | 国内精品久久久久久久久 | 欧美一区在线看 | 中文字幕一区二区三区波野结 | 丰满岳乱妇一区二区 | 俺去射| 超碰在线98 | 欧美成人激情 | 国产精品区一区二 | 中文字幕第66页 | av中文字幕网| 久久精品日韩无码 | 91综合久久 | 欧美男女交配 |