@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());
}