Spring MVC - RequestParamException参数不存在

时间:2015-10-05 19:55:40

标签: javascript java ajax spring-mvc exception

我的网站最终出现了问题。它使用 AJAX 请求从服务器获取数据,该服务器使用 Spring MVC

会发生什么(间歇),有时我们会遇到像这样的例外:

org.springframework.web.bind.MissingServletRequestParameterException: Required Integer parameter 'page' is not present
at 

这种异常发生在一些 AJAX POST 调用中(不仅仅是针对这种情况!!),我们仍然无法重现它以了解正在发生的事情。

例如,在其中一种情况下,参数“page”(用于在用户滚动页面时加载内容 - 因此它是必需变量)通过 AJAX 调用发送一个' data '字段,其中page参数来自如下形式:

<input type="hidden" name="page" id="page" value="1">

ajax调用就像这个( $(“#filter”) url 都可以):

$.ajax({
    type: "POST",
    data: $("#filter").serialize(), // serializes the form's elements.
    url: _ctx + URL_FILTER,
    cache: false
})

我们重现的唯一方法是将其属性“名称”更改为“ page ”以外的其他内容。但我想情况并非如此(大多数用户甚至都没有打开开发者控制台......)

我用Google搜索了很多内容,并检查了所有可能性。借口还可以:

(Content-Type: application/x-www-form-urlencoded; charset=UTF-8) 

参数还可以,AJAX看起来不错,一切似乎都好......但是我们找不到发生了什么。我们已经尝试了很多可能性,但我们仍然不能强迫这些例外发生。

我们得到的一个假设是,有时AJAX可能会发送空数据块,而没有任何参数。但我们甚至不知道这是否真实,以及如何检查其真实性。

有什么可能性?怎么测试?

修改 我们可以重现一种获取异常的方法:重复重新加载页面几秒钟(按住重新加载键一段时间)。有没有办法防止这种情况的例外?!

3 个答案:

答案 0 :(得分:1)

对页面参数的控制器类方法进行以下更改 @RequestParam(defaultValue = 0)int page。

或者在此粘贴控制器方法。

答案 1 :(得分:1)

如果您无法找出缺少参数的原因,那么您可以添加

public void controllerMethodName (@RequestParam(required = false) int page)

您的控制器定义中的代码,如果您的ajax请求中不存在参数,则不会抛出任何异常。

答案 2 :(得分:1)

您确定自己的表单未同时修改吗?例如,如果用于处理页面滚动的库尝试在很短的时间内发送相同的表单(第一个调用在第二个调用序列化时更新表单)。这可能只适用于某些浏览器,而不是所有浏览器,因为您无法轻松复制它。

数据放回表单的方式也可能是您的问题所在。

记录HTTP请求/使用分析可帮助您识别导致问题的请求/用户代理。