在做前后端交互的时候,经常会有集合(数组)的传递。查资料有很多种方式,但是貌似都不通用,尤其是使用@RequestParam标签的时候,还容易报required XXX parameter 'XXX' is not present 的错误,调半天也调不好。
如果你碰到了上述错误,可以参考这篇文章:
如果尝试多种方式也解决不了问题,我建议采用我的这种方式,我这里的解决思路是两边使用严格的JSON数据进行传递,也就是前端用JSON.stringify(param)的方法序列化参数,后端用@RequestBody HashMap<String, List<String>> param,Map中的List<String>也可以换成String[],经测试是没有问题的。
首先是前端代码:
var rows = $("#table_1").datagrid("getRows");
var list = new Array();
for(var i=0;i<rows.length;i++){
list[i] = rows[i].Code;
}
var param = {params:list}; //在后端约定的参数名称,就是用Map中的Key
var url = "/datacenter/sku_send/inventory.action";
$.ajax({
url : url,
data : JSON.stringify(param), //如果不用该方法进行序列化,则参数是param[0]=xx&¶m[1]=xx的格式
type : "POST",
dataType : 'json',
contentType : 'application/json',
complete: function () {
$.messager.progress('close');
},
success: function(data){
if(data.indexOf("success") != -1){
alert("成功!");
}else{
alert("失败,错误代码:" + data);
}
}
});
后端代码:
@ResponseBody
@RequestMapping(value="/hello",method=RequestMethod.POST)
public String hello(@RequestBody HashMap<String, List<String>> param) {
//用Map接json是最笨但是最靠谱的方式,如果有相对应的实体类,可以接过来再转为实体类,以减少出现异常的概率,节约开发排错时间。
List<String> strs = param.get("params");
}