常用註解之@ResponseBody與@RequestBody與@RestController
@ResponseBody:
@ResponseBody是作用在方法上的,@ResponseBody 表示該方法的返回結果直接寫入 HTTP response body 中,一般在非同步獲取資料時使用【也就是AJAX】,在使用 @RequestMapping後,返回值通常解析為跳轉路徑,但是加上 @ResponseBody 後返回結果不會被解析為跳轉路徑,而是直接寫入 HTTP response body 中。 比如非同步獲取 json 資料,加上 @ResponseBody 後,會直接返回 json 資料。@RequestBody 將 HTTP 請求正文插入方法中,使用適合的 HttpMessageConverter 將請求體寫入某個物件。
@RequestBody:
通過@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中的屬性名,否則是請求不過去的。
@requestBody註解常用來處理通常用於處理json格式的內容,將json對應的值轉換為需要的類物件或者其他,前臺ajax提交請求時應當為json格式,比如:
通過 contentType: "application/json; charset=utf-8" 定義請求內容的格式
data: JSON.stringify(tableArrayJsonData1) 把需要傳的引數轉為json格式
後臺接收:
這樣寫好之後,@RequestBody會自動來解析JSON傳,對應到@RequestBody的實體類裡面去。
@RestController:
@RestController註解相當於@ResponseBody + @Controller合在一起的作用。
參考文章:
https://www.cnblogs.com/qiankun-site/p/5774300.html