1呈驶、傳遞json數(shù)據(jù)有沒有必要用RequestBody?
在使用SpringMVC的時候自己一直避免使用RequestBody,因為覺的它在參數(shù)處理的時候不夠方便疫鹊。
理由如下:
1.不使用RequestBody時是這樣的:
前端參數(shù)可以直接使用JSON對象:
//此時請求的ContentType默認是application/x-www-form-urlencoded:
var user= {
"username" : username,
"password" : password,
"rememberMe":rememberMe
};
$.ajax({
url : "http://...../jsontest.do",
type : "POST",
async : true,
data : user,
dataType : 'json',
success : function(data) {
}
});
后端參數(shù)的寫法也很靈活:
@RequestMapping("/jsontest.do")
public void test(User user,String username,String password,Boolean rememberMe){
System.out.println(user);
System.out.println("username: " + username);
System.out.println("password: " + password);
System.out.println("rememberMe: " + rememberMe);
}
2.而使用RequestBody是這樣的:s
前端使用application/json的時候袖瞻,必須要將JSON對象轉(zhuǎn)換為JSON字符串
//需要使用JSON.stringify()將JSON對象轉(zhuǎn)化為JSON字符串
var user= {
"username" : username,
"password" : password
};
$.ajax({
url : "http://...../jsontest.do",
type : "POST",
async : true,
contentType: "application/json; charset=utf-8",
data : JSON.stringify(user),
dataType : 'json',
success : function(data) {
}
});
后端參數(shù)的用法也不靈活:/這種方式下所有的參數(shù)都只能封裝在User對象中,不能單獨設置參數(shù)
@RequestMapping("/jsontest")
public void test(@RequestBody User user ){
String username = user.getUsername();
String password = user.getPassword();
}
或者
@RequestMapping("/jsontest")
public void test(@RequestBody Map map ){
String username = map.get("username").toString();
String password = map.get("password").toString();
}
或者
public void test(@RequestBody String jsonData) {
JSONObject jsonObject = JSON.parseObject(jsonData);
String username= jsonObject.getString("username");
String username= jsonObject.getString("password");
}