美文网首页
post参数大小引发的血案

post参数大小引发的血案

作者: 不二不二熊 | 来源:发表于2019-09-28 22:16 被阅读0次
一、项目背景

接手的大概是5年前的一份代码,有个修改左侧树形节点的请求,大概逻辑是新增树形节点后,首先删除全部父节点,然后重新生成。可是,节点变成json传值到后台时,后台死活收不到请求。关键是:现场代码与开发环境代码一致,离奇的在开发环境无论如何收到的值都为NUll,而现场环境却没问题,场面一度十分尴尬!!


代码大概如下:

function saveNode(){
        var allnodes = tree.getNodes();
        $.post("$!{rc.contextPath}/xxxx/xxxx",{allnodes:JSON.stringify(allnodes)},function(data){
            alert(data);
        });
    }
    @ResponseBody
    @RequestMapping(value = "saveTreeNodes", method = RequestMethod.POST)
    public String saveTreeNodes(String allnodes){
        try{
            JSONArray json = JSON.parseArray(allnodes);
            basetreenodeService.deleteAll();
            insertNodesRecursion(json);
            return "保存成功";
        }catch (Exception e)
        {
            e.printStackTrace();
            return "保存失败请重新尝试";
        }
    }
二、思考过程

期间尝试在后台请求参数上使用各种@requestParam之类的,修改post为标准的ajax请求方式,或者设为同步,或者ajax加上json指定,均以失败告终。在翻阅乐无数的资(百)料(度)后,没有找到有效的解决办法。正一筹莫展的时候,只能想想现场环境与开发环境有什么不同,在排除掉代码以及tomcat版本和jdk版本的不同后,只有tomcat配置不同这种可能了,这是唯一不在代码中体现的。顺着这个思路,想到了有可能是参数超过post请求参数限制而导致的这个问题。

三、解决
  1. tomcat配置(server.xml文件,新增maxPostSize属性)
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
maxPostSize = "-1" 
               />
  1. SpringBoot项目
server:  
  tomcat:
    max-http-post-size: -1
四、参考资料

ajax的post提交参数长度超出限制的解决办法

相关文章

网友评论

      本文标题:post参数大小引发的血案

      本文链接:https://www.haomeiwen.com/subject/hlyryctx.html