前言:在很多时候,前台传递的参数是数组,这时不好拼接成字符串的键值对参数,那可以按照如下方式解决:
1、添加”traditional:true”参数和contentType: 'application/json;charset=UTF-8'
traditional:是否使用传统的方式浅层序列化。
contentType:"application/json":向后台发送数据的格式必须为json字符串,向后台发送的数据为复杂json数据时,也必须设置contentType为"application/json"
数组或jQuery对象会按照name/value对进行序列化,普通对象按照key/value对进行序列化
注:可以把数组封装到json对象里面,如果要单传数组也是可以的。
var arr=new Array();
arr[0]='param';
arr[1]='param2';
$.ajax({
url:请求地址,
type:"POST",
data:JSON.stringify(arr),
contentType: 'application/json',
traditional:true, //默认false
success:function(){
//do something
}
});
通过ajax提交数组时,会自动在所设定的参数后面增加中括号:“[]”,导致后端spring MVC中的@RequestParam获取不到参数。
ajax请求时增加:traditional: true 就可以正常提交了。原因如下:
jQuery会调用jQuery.param序列化参数,jQuery.param( obj, traditional ),默认的话,traditional为false,即jquery会深度序列化参数对象,以适应如PHP和Ruby on Rails框架,但servelt api无法处理,我们可以通过设置traditional 为true阻止深度序列化。
2、后台接收:
注:后台接收可以使用数组或者list,如果使用list,泛型就根据前台数组里面参数的类型决定。
@PostMapping("/more_delete")
@ResponseBody
public String moreDeleteToCarts(@RequestBody List<Integer> params) {//@RequestBody Integer[] params
//do something...
return null;
}