我有个问题最终会出现在我的网站上。它使用AJAX请求从服务器获取数据,服务器使用Spring 。
发生的事情(间歇性的)是,有时我们会遇到这样的例外:
org.springframework.web.bind.MissingServletRequestParameterException: Required Integer parameter 'page' is not present
at
这种异常发生在某些AJAX POST调用中(不仅在本例中!)我们仍然无法复制它来理解正在发生的事情。
例如,在其中一种情况下,参数' page‘(用于在用户滚动页面时加载内容-因此它是必需的变量)通过具有“data”字段的AJAX调用发送,该字段的页面参数来自如下表单:
<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
})
我们要复制的唯一方法是将其属性“名称”更改为“页面”以外的其他内容。但我想情况并非如此(大多数用户甚至都不打开开发人员控制台.)
我在谷歌上搜索了很多次,我检查了所有的可能性。这是可以的:
(Content-Type: application/x-www-form-urlencoded; charset=UTF-8)
参数没问题,AJAX看起来没问题,一切都还好.但我们找不到到底是怎么回事。我们已经尝试了很多的可能性,但我们仍然不能强迫这些例外发生。
我们的一个假设是,有时AJAX可能会发送空数据块,没有任何参数。但我们甚至不知道这是真的还是假的,以及如何检查它的真实性。
有什么可能性?如何进行测试?
编辑:我们可以复制获得异常的一种方法:重复加载页面几秒钟(将重新加载键按下一段时间)。有什么办法可以防止这个案子的例外吗?!
发布于 2015-10-12 10:34:54
对页参数@RequestParam(defaultValue = 0) int页的控制器类方法进行以下更改。
或者在这里粘贴控制器方法。
发布于 2015-10-12 11:37:02
如果您无法找出丢失参数背后的原因,则可以添加
public void controllerMethodName (@RequestParam(required = false) int page)
控制器定义中的代码,如果ajax请求中没有参数,则不会抛出任何异常。
发布于 2015-10-14 22:19:28
你确定你的表单不是同时被修改的吗?例如,如果用于处理页面滚动的库试图在很短的时间内发送相同的表单(第一个调用更新表单,而第二个调用正在序列化表单)。这可能只出现在某些浏览器上,而不是所有浏览器上,因为您无法轻松地复制它。
数据返回表单的方式也可能对您的问题负责。
记录HTTP请求/使用分析可以帮助您识别哪些请求/用户代理会导致问题。
https://stackoverflow.com/questions/32956844
复制相似问题