JAVA开发中,页面post提交的数据后台通过request取出时是空的,所有参数都消失了

这两天调查一个问题,一个特定的制造编号检索出623条数据,并显示在页面上。然后再把数据提交时,后台报空指针,调试后发现request中是空的,所有参数都消失了!换其它的制造编号就不会出现这个问题,开始以为是数据不同,走了不同分支,多次检查数据和代码后并没有发现问题。页面代码也运行正常,没有错误。

由于页面到后台之间没出任何异常,request内容就凭空消失了,一时找不到方向了。在第N次调试时,页面数据的行数引起了我的注意,经过调试发现,正常处理的制造编号数据行大多在100内,没有超过100的,而出错的这批数据有600多行和37列尴尬,因此判断可能跟提交的数据量有关系。

遂请教了一下同事,得知tomcat对post提交数据大小有限制,由于以前没提交过那么多数据,还不知道tomcat这个参数的存在。

然后在百度上google了一下,maxPostSize="0"这个参数映入眼帘,设参数重启tomcat调试一气呵成。然后,并没有那么顺利。java.lang.IllegalStateException: More than the maximum number of request parameters (GET plus POST) for a single request ([10,000]) were detected. Any parameters beyond this limit have been ignored. To change this limit, set themaxParameterCount attribute on the Connector.控制台一个提示信息,后台接收到的数据也只有5分之1。经查询,还有一个maxParameterCount参数限制了,然后设参数maxParameterCount="100000",重启调试结束。 大功告成。

如果你不知道参数的 key,那么就需要对请求进行解析,找到需要修改的参数。可以通过以下步骤进行: 1. 在 HandlerInterceptorAdapter 重写 preHandle 方法,获取 request 对象。 2. 判断请求方法是否为 POST,如果是 POST 请求,则获取请求参数。 3. 解析请求参数,找到需要修改的参数并进行修改。 4. 将修改后的参数重新设置到 request 。 以下是一个示例代码,仅供参考: ```java @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if ("POST".equalsIgnoreCase(request.getMethod())) { // 获取请求参数 String requestBody = getRequestBody(request); // 解析参数,找到需要修改的参数 String modifiedParameter = modifyParameter(requestBody); // 将修改后的参数重新设置到 request request.setAttribute("parameterKey", modifiedParameter); } return true; } private String getRequestBody(HttpServletRequest request) throws IOException { BufferedReader reader = request.getReader(); StringBuilder requestBody = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { requestBody.append(line); } return requestBody.toString(); } private String modifyParameter(String requestBody) { // 解析请求参数,找到需要修改的参数并进行修改 // ... return "modifiedParameterValue"; } ``` 在上述代码,需要根据实际情况修改 modifyParameter 方法的实现,以解析参数并找到需要修改的参数。同,需要将修改后的参数重新设置到 request ,以便后续的处理器能够获取到修改后的参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值