Spring MVC – RequestParamException参数不存在

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

间歇性地 )发生的事情是,有时我们会遇到像这样的exception:

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

这种exception发生在一些AJAX POST调用中(不仅仅适用于这种情况!!)我们仍然无法重现它以了解正在发生的事情。

例如,在其中一种情况下,参数’page’(用于在用户滚动页面时加载内容 – 因此它是必需变量)通过AJAX调用发送,该调用具有带有页面参数的’ data ‘字段从这样的forms:

  

这样的ajax调用( $(“#filter”)url都可以):

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

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

我已经google了很多,我检查了所有可能性。 借口还可以:

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

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

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

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

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

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

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

如果您无法弄清楚缺少参数的原因是什么,那么您可以添加

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

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

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

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

记录HTTP请求/使用分析可帮助您确定哪些请求/用户代理导致问题。