@ResponseBody詳解


@ResponseBody的作用其實是將java對象轉為json格式的數據。

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

@ResponseBody是作用在方法上的,@ResponseBody 表示該方法的返回結果直接寫入 HTTP response body 中,一般在異步獲取數據時使用【也就是AJAX】。
注意:在使用 @RequestMapping后,返回值通常解析為跳轉路徑,但是加上 @ResponseBody 后返回結果不會被解析為跳轉路徑,而是直接寫入 HTTP response body 中。 比如異步獲取 json 數據,加上 @ResponseBody 后,會直接返回 json 數據。@RequestBody 將 HTTP 請求正文插入方法中,使用適合的 HttpMessageConverter 將請求體寫入某個對象。

  1.  
    后台 Controller類中對應的方法:
  2.  
    @RequestMapping("/login.do")
  3.  
    @ResponseBody
  4.  
    public Object login(String name, String password, HttpSession session) {
  5.  
    user = userService.checkLogin(name, password);
  6.  
    session.setAttribute( "user", user);
  7.  
    return new JsonResult(user);
  8.  
    }
  9.  
     
  10.  
    @RequestBody是作用在形參列表上,用於將前台發送過來固定格式的數據【xml格式 或者 json等】封裝為對應的 JavaBean 對象,
  11.  
    封裝時使用到的一個對象是系統默認配置的 HttpMessageConverter進行解析,然后封裝到形參上。
  12.  
    如上面的登錄后台代碼可以改為:
  13.  
    @RequestMapping("/login.do")
  14.  
    @ResponseBody
  15.  
    public Object login(@RequestBody User loginUuser, HttpSession session) {
  16.  
    user = userService.checkLogin(loginUser);
  17.  
    session.setAttribute( "user", user);
  18.  
    return new JsonResult(user);
  19.  
    }

=========================================================================================

@RequestBody

@RequestBody 注解則是將 HTTP 請求正文插入方法中,使用適合的 HttpMessageConverter 將請求體寫入某個對象。
作用:

  1.  
    1) 該注解用於讀取Request請求的body部分數據,使用系統默認配置的HttpMessageConverter進行解析,然后把相應的數據綁定
  2.  
    到要返回的對象上; 
  3.  
    2) 再把HttpMessageConverter返回的對象數據綁定到 controller中方法的參數上。

使用時機:

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

  1.  
    application/x-www-form-urlencoded, 可選(即非必須,因為這種情況的數據 @RequestParam, @ModelAttribute
  2.  
    也可以處理,當然 @RequestBody也能處理); 
  3.  
    multipart/form- data, 不能處理(即使用@RequestBody不能處理這種格式的數據); 
  4.  
    其他格式, 必須(其他格式包括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.  
    @RequestMapping(value = "user/login")
  2.  
    @ResponseBody
  3.  
    // 將ajax(datas)發出的請求寫入 User 對象中
  4.  
    public User login( @RequestBody User user) {
  5.  
    // 這樣就不會再被解析為跳轉路徑,而是直接將user對象寫入 HTTP 響應正文中
  6.  
    return user;
  7.  
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM