@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 將請求體寫入某個對象。
-
后台 Controller類中對應的方法:
-
-
-
public Object login(String name, String password, HttpSession session) {
-
user = userService.checkLogin(name, password);
-
session.setAttribute( "user", user);
-
return new JsonResult(user);
-
}
-
-
-
封裝時使用到的一個對象是系統默認配置的 HttpMessageConverter進行解析,然后封裝到形參上。
-
如上面的登錄后台代碼可以改為:
-
-
-
public Object login(
-
user = userService.checkLogin(loginUser);
-
session.setAttribute( "user", user);
-
return new JsonResult(user);
-
}
=========================================================================================
@RequestBody
@RequestBody 注解則是將 HTTP 請求正文插入方法中,使用適合的 HttpMessageConverter 將請求體寫入某個對象。
作用:
-
1) 該注解用於讀取Request請求的body部分數據,使用系統默認配置的HttpMessageConverter進行解析,然后把相應的數據綁定
-
到要返回的對象上;
-
2) 再把HttpMessageConverter返回的對象數據綁定到 controller中方法的參數上。
使用時機:
A) GET、POST方式提時, 根據request header Content-Type的值來判斷:
-
application/x-www-form-urlencoded, 可選(即非必須,因為這種情況的數據
-
也可以處理,當然
-
multipart/form- data, 不能處理(即使用
-
其他格式, 必須(其他格式包括application/json, application/xml等。這些格式的數據,必須使用
B) PUT方式提交時, 根據request header Content-Type的值來判斷:
application/x-www-form-urlencoded, 必須;multipart/form-data, 不能處理;其他格式, 必須;
說明:request的body部分的數據編碼格式由header部分的Content-Type指定;
例如:
-
@RequestMapping(value = "user/login")
-
@ResponseBody
-
// 將ajax(datas)發出的請求寫入 User 對象中
-
public User login( @RequestBody User user) {
-
// 這樣就不會再被解析為跳轉路徑,而是直接將user對象寫入 HTTP 響應正文中
-
return user;
-
}