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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

requestbody接收不到参数_使用Spring MVC解析嵌套参数在三种 ContentType 下的绑定方式...

發布時間:2023/12/19 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 requestbody接收不到参数_使用Spring MVC解析嵌套参数在三种 ContentType 下的绑定方式... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.關于三種 Content-Type

  • multipart/form-data 請求中既可以攜帶文件,又可以攜帶參數。其中參數以鍵值對的方式傳遞,參數之間、參數與文件之間以 content-disposition 分隔;

  • application/x-www-form-urlencoded 只能上傳參數,不能攜帶文件,參數通過 ?xxx=xxx&xxx=xxx 的方式被組織在一起;

  • application/json 只能上傳參數,不能攜帶文件,參數不被特殊組織,保持原 JSON 字符串的形式

  • 2.測試數據

    這里采用嵌套數據如下:

    { "username": "dailybird", "password": "dailybirdo", "ids": [1,2,3], "detail": { "gender": "male", "location": "Beijing", "ids": [4,5,6] }}

    *與文件上傳相關的參數后面會單獨提到,這里先進行非文件參數提交的實驗。

    預期綁定的對象

    public class User { private String username; private String password; private List ids; private Detail detail; public static class Detail { private String gender; private String location; private List ids; }}

    3. 綁定方式

    3.1 利用 @RequestBody 解析 application/json 的 POST請求

    控制器代碼如下:

    @RequestMapping(value = "/application/json") public String applicationJson(@RequestBody User user) { log.info("{}", user.toString()); return user.toString(); }

    當使用 POST,并攜帶 Content-Type: application/json 頭發送請求時,控制器能夠完全解析嵌套的參數。

    由于 @RequestBody 本身是調用 HttpMessageConverter 解析請求體中的數據,而 GET 方式的參數不會存在于請求體中,所以 @RequestBody 不能處理 GET 方式的請求。

    3.2 利用 @RequestParam 接收 multipart/form-data 及 application/x-www-form-urlencoded 中的請求

    控制器代碼如下:

    public String xWwwFormUrlencoded(@RequestParam("username") String username, @RequestParam("password") String password, @RequestParam("ids")List ids, @RequestParam("detail") Detail detail) { log.info("{}, {}, {}, {}", username, password, ids, detail); return ""; }

    其中 Detail 類為與之前 User 內部類等同的類。

    3.2.1 application/x-www-form-urlencoded

    這里我們借助 jquery 的相關函數進行測試:

    Required List parameter 'ids' is not present

    但我們確實已經發送了 ids 參數,為什么沒有獲取到呢?這一點我們放到之后再談,先試一下 multipart/form-data 的方式。

    3.2.2 multipart/form-data

    當然,采用這一方式,我們會收到同樣的提示:

    Required List parameter 'ids' is not present

    原因是multipart/form-data本來就只能發送文件和不嵌套的鍵值對解決辦法就是把需要嵌套的json數據在發送前用JSON.stringify()方法轉為json字符串,放入form表單中,就可以了。

    在 Spring MVC 中,我們可以不書寫 @RequestParam,直接使用與請求參數同名的變量進行接收( 或直接使用一個 POJO 對象 ),但該方式也存在著與以上相同的問題。

    3.3 文件上傳問題

    最開始已經說過,若要上傳文件,在上述三種 Content-Type 中,只能使用 multipart/form-data,在注意到 3.2 中所提到的問題后,我們便可以通過 MultipartFile 類型的屬性來獲取到文件參數了。

    從 Laravel 過渡到 Spring Boot,確實感到了在控制器層面二者的差異( 當然在 DAO 層更是如此 ),以下給出一個列表,用以紀念自己踩的坑:

    總結

    以上是生活随笔為你收集整理的requestbody接收不到参数_使用Spring MVC解析嵌套参数在三种 ContentType 下的绑定方式...的全部內容,希望文章能夠幫你解決所遇到的問題。

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