SpringMVC(3)——@PathVariable&@RequestBody


背景:今天來分享一下@PathVariable&@RequestBody~~~


一、@PathVariable


作用:

    映射URL綁定的佔位符

    帶佔位符的URL時Spring3.0新增的功能,該功能再SpringMVC向REST 目標挺進發展過程中具有里程碑的意義。

    通過@PathVariable可以將URL中佔位符參數綁定到控制器處理方法的入參中:URL中的{xxx}佔位符可以通過@Path Variable("xxx")綁定道操作方法的入參中。


例子:

SpringMVCTest.java



index.jsp



二、@RequestBody


作用: 
    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指定;



例子:

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類的話也可以使用這種接受方式。


三、何爲REST?


即Representational StateTransfer 。(資源)表現層狀態轉化。

(今天先分享到這裏了~~~)





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章