@RequestParam @RequestBody @ResponseBody區別

@requestBody註解的使用

 

@RequestBody這個一般處理的是在ajax請求中聲明contentType: “application/json; charset=utf-8”時候。也就是json數據格式或者 xml 數據格式

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


@RequestParam
@RequestParam這個一般就是在ajax裏面沒有聲明contentType的時候,爲默認的. 另外使用form提交數據的就只能使用@RequestParam接收。 

@responseBody註解的使用

1、@responseBody註解的作用是將controller的方法返回的對象通過適當的轉換器轉換爲指定的格式之後,寫入到response對象的body區,通常用來返回JSON數據或者是XML 
數據,需要注意的呢,在使用此註解之後不會再走試圖處理器,而是直接將數據寫入到輸入流中,他的效果等同於通過response對象輸出指定格式的數據。
 

@RequestMapping(“/login”) 
  @ResponseBody 
  public User login(User user){ 
    return user; 
  } 

User字段:userName pwd 
  那麼在前臺接收到的數據爲:’{“userName”:”xxx”,”pwd”:”xxx”}’

  效果等同於如下代碼:

@RequestMapping(“/login”) 
  public void login(User user, HttpServletResponse response){ 
   response.getWriter.write(JSONObject.fromObject(user).toString()); 
  }

 

 

 

 

 

 

 

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