有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javascript Spring MVC RequestParameterException参数不存在

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

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

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

这种异常发生在一些ajaxpost调用中(不仅仅是这种情况!!)我们仍然无法复制它来理解正在发生的事情

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

<input type="hidden" name="page" id="page" value="1">

还有一个ajax调用,比如这个调用($(“#过滤器”)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可能发送空数据块,而不带任何参数。但我们甚至不知道它是否真实,也不知道如何检查它的真实性

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

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


共 (3) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

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

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

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

  3. # 3 楼答案

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

    将数据放回表单的方式也可能是造成问题的原因

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