【发布时间】:2016-01-02 14:18:32
【问题描述】:
我的网站最终出现了一个问题。它使用 AJAX 请求从服务器获取数据,该服务器使用 Spring MVC。
会发生什么(间歇性)有时我们会遇到这样的异常:
org.springframework.web.bind.MissingServletRequestParameterException: Required Integer parameter 'page' is not present
at
这种异常发生在一些 AJAX POST 调用中(不仅仅是这种情况!!),我们仍然无法重现它以了解发生了什么。
例如,在其中一种情况下,参数“page”(用于在用户滚动页面时加载内容 - 因此它是必需的变量)是通过 AJAX 调用发送的,该调用具有一个“数据”字段,其页面参数来自这样的表单:
<input type="hidden" name="page" id="page" value="1">
还有一个 ajax 调用 like 这个($("#filter") 和 url 都可以):
$.ajax({
type: "POST",
data: $("#filter").serialize(), // serializes the form's elements.
url: _ctx + URL_FILTER,
cache: false
})
我们重现它的唯一方法是将其属性“名称”更改为“page”以外的其他内容。但我想情况并非如此(大多数用户甚至不打开开发者控制台......)
我用谷歌搜索了很多,我检查了每一种可能性。结尾没问题:
(Content-Type: application/x-www-form-urlencoded; charset=UTF-8)
参数没问题,AJAX 看起来没问题,一切似乎没问题……但是我们找不到发生了什么。我们尝试了很多可能性,但仍然无法强制这些异常发生。
我们的一个假设是,有时 AJAX 可能会发送空数据块,而没有任何参数。但我们甚至不知道它是真是假,也不知道如何验证它的真实性。
有哪些可能性?如何测试?
编辑: 我们可以重现获得异常的一种方法:重复重新加载页面几秒钟(按住重新加载键一段时间)。有没有办法防止这种情况发生异常?!
【问题讨论】:
-
你能记录下服务器收到的HTTP请求吗?它可能有助于诊断问题。
-
你能展示你是如何在控制器中定义你的方法的吗,在我看来你把参数页面设置为强制性的
-
@Sudakatux 参数必须是强制的,这就是问题所在!每次执行 AJAX 调用时它都应该在那里。 Gaël 我不确定。我应该如何记录服务器上收到的 HTTP 请求?问题是我不知道我是否可以为每个 HTTP 请求(例如,来自这个特定的 ajax 调用)生成一个日志文件,因为它每小时会有 100.000 个条目......而且可能只有 0.001% 会给出我是个例外
-
对于这样的情况,我建议捕获前端错误并将它们发送到分析或类似的东西。你可以有各种拦截器。
-
粘贴您的
controller代码。
标签: javascript java ajax spring-mvc exception