中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringMVC之@requestBody的作用是什么

發布時間:2023-04-10 15:54:16 來源:億速云 閱讀:94 作者:iii 欄目:開發技術

這篇文章主要介紹“SpringMVC之@requestBody的作用是什么”,在日常操作中,相信很多人在SpringMVC之@requestBody的作用是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”SpringMVC之@requestBody的作用是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    @requestBody的作用及說明

    1、@requestBody注解常用來處理content-type不是默認的application/x-www-form-urlcoded編碼的內容,比如說:application/json或者是application/xml等。

    一般情況下來說常用其來處理application/json類型。  

    2、通過@requestBody可以將請求體中的JSON字符串綁定到相應的bean上,當然也可以將其分別綁定到對應的字符串上。    

    例如說以下情況:

    $.ajax({       
             url:"/login",       
             type:"POST",        
              data:'{"userName":"admin","pwd","admin123"}',      
            content-type:"application/json charset=utf-8",        
              success:function(data)
                 {          
                    alert("request success ! ");       
                }    
    });
     @requestMapping("/login")    
      public void login(@requestBody String userName,@requestBody String pwd){      
      System.out.println(userName+" :"+pwd);    
    }

    這種情況是將JSON字符串中的兩個變量的值分別賦予了兩個字符串,但是呢假如我有一個User類,擁有如下字段:      

    String userName;  
    String pwd;   

    那么上述參數可以改為以下形式:@requestBody User user 這種形式會將JSON字符串中的值賦予user中對應的屬性上    

    需要注意的是,JSON字符串中的key必須對應user中的屬性名,否則是請求不過去的。 

    3、在一些特殊情況@requestBody也可以用來處理content-type類型為application/x-www-form-urlcoded的內容,只不過這種方式不是很常用,在處理這類請求的時候,@requestBody會將處理結果放到一個MultiValueMap<String,String>中,這種情況一般在特殊情況下才會使用,例如jQuery easyUI的datagrid請求數據的時候需要使用到這種方式、小型項目只創建一個POJO類的話也可以使用這種接受方式。

    作用:     

    • i) 該注解用于讀取Request請求的body部分數據,使用系統默認配置的HttpMessageConverter進行解析,然后把相應的數據綁定到要返回的對象上;     

    • ii) 再把HttpMessageConverter返回的對象數據綁定到 controller中方法的參數上。

    使用時機:

    A) GET、POST方式提時, 根據request header Content-Type的值來判斷:   

    • application/x-www-form-urlencoded, 可選(即非必須,因為這種情況的數據@RequestParam, @ModelAttribute也可以處理,當然@RequestBody也能處理);   

    • multipart/form-data, 不能處理(即使用@RequestBody不能處理這種格式的數據);   

    • 其他格式, 必須(其他格式包括application/json, application/xml等。這些格式的數據,必須使用@RequestBody來處理); 

    B) PUT方式提交時, 根據request header Content-Type的值來判斷:   

    • application/x-www-form-urlencoded, 必須;   

    • multipart/form-data, 不能處理;   

    • 其他格式, 必須;

    • 說明:request的body部分的數據編碼格式由header部分的Content-Type指定;

    使用@RequestBody瀏覽器報415錯誤

    最近在寫一個前后端分離項目,前后端數據交互都使用json的格式,在使用SpringMVC的@RequestBody時,一直報415的錯誤,意思就是后臺無法處理content-type=application/json格式的數據,我后臺已經使用@RequestBody,就是不行,但是如果參數類型為String就可以接收,實體類的就是不行,看了很多教程,沖浪了一天,終于找到了解決方案。

    解決方式

    1。在項目中導入兩個jar包

        <dependency>
          <groupId>org.codehaus.jackson</groupId>
          <artifactId>jackson-mapper-asl</artifactId>
          <version>1.9.13</version>
        </dependency>
     
        <dependency>
          <groupId>org.codehaus.jackson</groupId>
          <artifactId>jackson-core-asl</artifactId>
          <version>1.9.13</version>
        </dependency>

    2.在app-servlet.xml(你的springmvc配置文件),加入一行配置 

    <mvc:annotation-driven/>

    或者配置一個適配器(兩種方式選一個即可,我是使用的上面的方式)

        <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
            <property name="messageConverters">
                <list>
                    <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
                </list>
            </property>
        </bean>

    這樣就解決了415的報錯。

    附上我的controller層的代碼。

    @RestController
    @CrossOrigin
    public class LoginController {
        @PostMapping("/loginPost")
        public String loginPost(@RequestBody User user,@RequestHeader HttpHeaders header){
            System.out.println(header.getContentType());
            System.out.println(user.getName());
            System.out.println(user.getPassword());
            return "success";
        }
    }

    到此,關于“SpringMVC之@requestBody的作用是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    安徽省| 正安县| 安岳县| 内乡县| 北川| 洞口县| 蒙城县| 逊克县| 安泽县| 宁夏| 淮安市| 延长县| 安乡县| 兴安盟| 桂平市| 广元市| 鹤壁市| 和林格尔县| 雷波县| 滨海县| 肇源县| 祁门县| 霞浦县| 岱山县| 东阿县| 仪征市| 呼伦贝尔市| 太仓市| 阳城县| 凌海市| 宁南县| 武平县| 油尖旺区| 淮北市| 晋江市| 上犹县| 土默特右旗| 夏河县| 绵竹市| 南木林县| 湖南省|