關於@RequestBody注解詳解
加了@RequestBody注解后前端調用參數設置問題(2021.7.21)
1、@requestBody注解常用來處理content-type不是默認的application/x-www-form-urlcoded編碼的內容,比如說:application/json或者是application/xml等。一般情況下來說常用其來處理application/json類型。@RequestBody接受的是一個json格式的字符串,一定是一個字符串。
2、通過@requestBody可以將請求體中的JSON字符串綁定到相應的bean上,當然,也可以將其分別綁定到對應的字符串上。
例如說以下情況:
$.ajax({
url:"/login",
type:"POST",
data:'{"userName":"admin","pwd","admin123"}',
content-type:"application/json charset=utf-8", //要特別注意后台接口是否加了@RequestBody,決定了傳遞參數的類型
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中的屬性名,否則是請求不過去的。
@requestMapping("/login")
public void login(@requestBody User user){
System.out.println(userName+" :"+pwd);
}
總結和注意:
1.@RequestBody接受的是一個json格式的字符串,一定是一個字符串。
2.在使用springmvc的做項目時,不要將JSON字符串和JSON對象混淆了。
3.加了@RequestBody注解的參數類型是一個json的字符串,不是一個對象,前端調用接口的時候特別要注意參數傳遞的類型。(可以通過JSON.stringify(Json_Str) 該方法把前端的字符串格式化了在發送 )