前台实体对象“包装”:
//应用情景一般是插入实体对象到数据库啥的
//第一种方式创建方式
var xxxEntity = {
//实体对象的属性值
"id" : 1;
"name" : 'Ben';
"age" : 23;
}
//第二种创建方式
var xxxEntity = {};
xxxEntity.id = 1;
xxxEntity.name = 'Ben';
xxxEntity.age = 23;
前台ajax书写:
$.ajax({
type: "POST", //注意是POST方式提交
url: 'xxx',
contentType: "application/json", //这个不能漏
data: JSON.stringify(xxxEntity), //这个也不能漏,将对象(或数组)转换成json字符串
success: function(r){
//成功返回后的操作
}
});
后台controller接收:
@RequestMapping("/create")
public void create(@RequestBody XxxEntity xxxEntity){ //注意要用@RequstBody
//对实体对象的操作
}
扩展:
当传参是Map类型的
//前台
$.ajax({
type: "GET", //注意是GET方式提交
url: 'xxx',
contentType: "application/json", //这个不能漏
data: {
"data1" : aa, //'data1'作为map的key,aa是value
"data2" : bb,
"data3" : cc
}
//data: {"id" : id}
success: function(r){
//成功返回后的操作
}
});
@RequestMapping("/query")
public void query(@RequestParam Map<String, String> query){ //注意要用@RequstParam
String data1 = query.get("data1");
//各种操作blabla..
}
总结:
- 如果controller中要以实体对象或数组来入参,用POST + @RequestBody组合,还有前台的数据要用data: JOSN.stringify(data),进行转换成JSON字符串
- 如果controller要以Map形式入参,用GET + @RequestParam组合,前台数据直接是data: data,不用转换
- 记得ajax中要写contentType: “application/json”
再唠叨几句:
这里只是提供技术实现,但是没有考虑到安全性的问题,事实上应该是要根据提交特性决定该用哪种方式提交,而不是根据接收方式来决定哪种方式提交。
欢迎大佬们指正或提供更好的解决方案