首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring RequestParamException参数不存在。

Spring RequestParamException参数不存在。
EN

Stack Overflow用户
提问于 2015-10-05 19:55:40
回答 3查看 2.4K关注 0票数 14

我有个问题最终会出现在我的网站上。它使用AJAX请求从服务器获取数据,服务器使用Spring

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

代码语言:javascript
运行
复制
org.springframework.web.bind.MissingServletRequestParameterException: Required Integer parameter 'page' is not present
at 

这种异常发生在某些AJAX POST调用中(不仅在本例中!)我们仍然无法复制它来理解正在发生的事情。

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

代码语言:javascript
运行
复制
<input type="hidden" name="page" id="page" value="1">

和类似于此的ajax调用( $("#filter")url都可以):

代码语言:javascript
运行
复制
$.ajax({
    type: "POST",
    data: $("#filter").serialize(), // serializes the form's elements.
    url: _ctx + URL_FILTER,
    cache: false
})

我们要复制的唯一方法是将其属性“名称”更改为“页面”以外的其他内容。但我想情况并非如此(大多数用户甚至都不打开开发人员控制台.)

我在谷歌上搜索了很多次,我检查了所有的可能性。这是可以的:

代码语言:javascript
运行
复制
(Content-Type: application/x-www-form-urlencoded; charset=UTF-8) 

参数没问题,AJAX看起来没问题,一切都还好.但我们找不到到底是怎么回事。我们已经尝试了很多的可能性,但我们仍然不能强迫这些例外发生。

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

有什么可能性?如何进行测试?

编辑:我们可以复制获得异常的一种方法:重复加载页面几秒钟(将重新加载键按下一段时间)。有什么办法可以防止这个案子的例外吗?!

EN

回答 3

Stack Overflow用户

发布于 2015-10-12 10:34:54

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

或者在这里粘贴控制器方法。

票数 1
EN

Stack Overflow用户

发布于 2015-10-12 11:37:02

如果您无法找出丢失参数背后的原因,则可以添加

代码语言:javascript
运行
复制
public void controllerMethodName (@RequestParam(required = false) int page)

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

票数 1
EN

Stack Overflow用户

发布于 2015-10-14 22:19:28

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

数据返回表单的方式也可能对您的问题负责。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32956844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档