一、项目背景
接手的大概是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请求参数限制而导致的这个问题。
三、解决
- tomcat配置(server.xml文件,新增maxPostSize属性)
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxPostSize = "-1"
/>
- SpringBoot项目
server:
tomcat:
max-http-post-size: -1
网友评论