success: function (data) {if (!data.success) {return;}var ph
参考网上队友的帖子:通报JSON数据有没有须要用RequestBody?https://www.cnblogs.com/NJM-F/p/10407763.html
1.不使用RequestBody时是这样的:
前端参数可以直接使用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) { } });
后端参数的可以用java东西接收,也可以用数据类型单独接收:
@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是这样的:
参考:https://blog.csdn.net/walkerJong/article/details/7520896
感化:
i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的东西上;
ii) 再把HttpMessageConverter返回的东西数据绑定到 controller中要领的参数上。
使用时机:
A) GET、POST方法提时, 按照request header Content-Type的值来判断:
application/x-www-form-urlencoded, 可选(即非必需,因为这种情况的数据@RequestParam, @ModelAttribute也可以措置惩罚惩罚,固然@RequestBody也能措置惩罚惩罚);
multipart/form-data, 不能措置惩罚惩罚(即使用@RequestBody不能措置惩罚惩罚这种格局的数据);
其他格局, 必需(其他格局包孕application/json, application/xml等。这些格局的数据,必需使用@RequestBody来措置惩罚惩罚);
B) PUT方法提交时, 按照request header Content-Type的值来判断:
application/x-www-form-urlencoded, 必需;
multipart/form-data, 不能措置惩罚惩罚;
其他格局, 必需;
说明:request的body部分的数据编码格局由header部分的Content-Type指定;
前端使用application/json的时候,必需要将JSON东西转换为JSON字符串
//需要使用JSON.stringify()将JSON东西转化为JSON字符串 var user= { "username" : username, "password" : password }; $.ajax({ url : "http://...../jsontest.do", type : "POST", async : true, contentType: "application/json; charset=utf-8",//将JSON东西转换为JSON字符串 data : JSON.stringify(user), dataType : ‘json‘, success : function(data) { } });
后端参数要用@RequestBody注解加java东西/map东西/字符串 接收,如果请求的地点后面有参数,则形参可以新增该参数的接收:
//这种方法下所有的参数都只能封装在User东西中,不能单独设置参数 @RequestMapping("/jsontest") //用java东西接收 public void test(@RequestBody User user ){ String username = user.getUsername(); String password = user.getPassword(); } 或者 @RequestMapping("/jsontest") //用map东西接收,再从map东西中按照key值获取value值 public void test(@RequestBody Map map ){ String username = map.get("username").toString(); String password = map.get("password").toString(); } 或者 public void test(@RequestBody String jsonData) { //用字符串接收,再将字符串转为json东西,最后再解析为具体的东西 JSONObject jsonObject = JSON.parseObject(jsonData); String username= jsonObject.getString("username"); String username= jsonObject.getString("password"); }
第1种有以下长处:
1.前端通报数据不用转换为json字符串:即不用JSON.stringify(user)
2.后端接受的参数很灵活,即可以封装为User东西,,亦可以使用单个参数username,rememberMe,甚至User东西和单个rememberMe参数混合使用都可以
第2种长处:
1.前端ajax请求传入对照庞大的数据格局时,用@RequestBody注解对照好(小我私家理解)
2.使用@RequestBody时,在ajax请求的地点后边也可以加上参数,然后在后台的controller参数中获取
例如
{
var params = {
id:id,
taskPhones:taskPhones,
groupId:groupId,
planType:planType,
scheduledTimeStr:scheduledTimeStr,
taskName:taskName,
templateContent:templateContent,
templateId:templateId,
taskTemplateValueList:taskTemplateValueList,
smilResourceId:smilResourceId,
}
submit(params, ‘0‘);
}
function submit(params,isTemp){
$.ajax({
url: WEB_ROOT + "/mall/task/saveTaskForEdit?isTemp="+isTemp,
type : "POST",
dataType : "JSON",
contentType:"application/json",
data: JSON.stringify(params),
success: function (data) {
if (data.success) {
var taskId=data.data;
msgInfoModal("告成",‘生存告成‘,function () {
window.location = WEB_ROOT + "/mall/task/taskIndex";
// window.location = WEB_ROOT + "/mall/task/editTask?id=" + taskId;
},true);
tab.alertReload(‘告成‘,‘生存告成‘,false,"toEdit("+demandId+")");
} else {
msgInfoModal("掉败",data.msg);
}
}
});
}
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30615.html