javascript Spring MVC RequestParameterException参数不存在
我的网站上最终出现了一个问题。它使用AJAX请求从服务器获取数据,服务器使用springmvc
发生的(间歇性地)是,有时我们会遇到这样的异常:
org.springframework.web.bind.MissingServletRequestParameterException: Required Integer parameter 'page' is not present
at
这种异常发生在一些ajaxpost调用中(不仅仅是这种情况!!)我们仍然无法复制它来理解正在发生的事情
例如,在其中一种情况下,参数“page”(用于在用户滚动页面时加载内容-因此它是一个必需的变量)通过一个AJAX调用发送,该调用具有一个“data”字段,其中page参数来自如下表单:
<input type="hidden" name="page" id="page" value="1">
还有一个ajax调用,比如这个调用($(“#过滤器”)和url都可以):
$.ajax({
type: "POST",
data: $("#filter").serialize(), // serializes the form's elements.
url: _ctx + URL_FILTER,
cache: false
})
我们复制它的唯一方法是将其属性“name”更改为“page”以外的内容。但我想情况并非如此(大多数用户甚至不打开开发人员控制台…)
我在谷歌上搜索了很多次,并检查了所有的可能性。重唱没问题:
(Content-Type: application/x-www-form-urlencoded; charset=UTF-8)
参数正常,AJAX看起来正常,一切都正常。。。但我们找不到发生了什么。我们已经尝试了很多可能性,但我们仍然无法强迫这些例外发生
我们的一个假设是,有时AJAX可能发送空数据块,而不带任何参数。但我们甚至不知道它是否真实,也不知道如何检查它的真实性
有什么可能性?如何进行测试
编辑: 我们可以复制一种获得异常的方法:重复重新加载页面几秒钟(按住重新加载键一段时间)。有没有办法防止这种情况的例外
# 1 楼答案
对页参数的控制器类方法进行以下更改 @RequestParam(defaultValue=0)int页
或者在此处粘贴控制器方法
# 2 楼答案
如果您无法找出缺少参数的原因,则可以添加
控制器定义中的代码,如果ajax请求中不存在参数,则不会引发任何异常
# 3 楼答案
您确定您的表单没有同时被修改吗?例如,如果用于处理页面滚动的库尝试在很短的时间内发送相同的表单(第一个调用更新表单,第二个调用序列化表单)。这可能只是在某些浏览器上,而不是在所有浏览器上,因为您无法轻松复制它
将数据放回表单的方式也可能是造成问题的原因
记录HTTP请求/使用分析将帮助您确定哪些请求/用户代理导致问题