Contrallor(mvc)接收前端传来的集合(数组)参数

在做前后端交互的时候,经常会有集合(数组)的传递。查资料有很多种方式,但是貌似都不通用,尤其是使用@RequestParam标签的时候,还容易报required XXX parameter 'XXX' is not present 的错误,调半天也调不好。

如果你碰到了上述错误,可以参考这篇文章:

https://blog.youkuaiyun.com/qq_40391559/article/details/82856868?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4

如果尝试多种方式也解决不了问题,我建议采用我的这种方式,我这里的解决思路是两边使用严格的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&&param[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");
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值