Spring MVC - RequestParamException 参数不存在

2022-09-04 04:39:19

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

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

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

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

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

<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
})

我们重现它的唯一方法是将其属性“name”更改为“page”以外的其他内容。但我想事实并非如此(大多数用户甚至不打开开发人员控制台...

我已经用谷歌搜索了很多,我检查了每种可能性。控制是可以的:

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

参数正常,AJAX看起来还行,一切似乎都还行...但是我们找不到正在发生的事情。我们已经尝试了很多可能性,但我们仍然不能强迫这些异常发生。

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

有哪些可能性?如何对其进行测试?

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


答案 1

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

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


答案 2

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

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

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