10

我有这个控制器方法的 Spring MVC 应用程序。

@RequestMapping(value = "/add", method = RequestMethod.POST)
public String addNumber(@RequestParam(value="number", required=false) Long number) {
   ...
   return "redirect:/showAll/";
}

在我的 JSP 中,我有一个标准的 HTML 表单,它将一个名为“number”的值发布到上面的控制器方法中。但是,如果我省略了值(不要在文本字段中输入任何内容)并将数据 POST 到控制器,在调用控制器方法之前,我的浏览器会显示

HTTP Status 400 - Required Long parameter 'number' is not present

尽管控制器方法注释清楚地定义了不需要的“数字”参数

有人对可能发生的事情有一点了解吗?

谢谢你。

PS:正在抛出的异常如下:

org.springframework.web.bind.MissingServletRequestParameterException: Required Long parameter 'number' is not present

编辑:这是一个 Spring 3.2.3.RELEASE 错误(见这里)。使用 3.1.4.RELEASE 版本,我不再有这个问题了。

4

2 回答 2

20

我遇到了同样的情况,当您的参数出现在请求中且值为空时,就会发生这种情况。

也就是说,如果您的 POST 正文包含“number=”(具有空值),则 Spring 会抛出此异常。但是,如果请求中根本不存在该参数,它应该可以正常工作而不会出现任何错误。

于 2013-10-06T21:09:29.917 回答
1

我的问题是我使用 Postman 发送的请求中的某些标头不存在(未选中):

在此处输入图像描述

当我检查Content-Length标题时,请求工作正常(200 OK 响应)。

于 2020-09-11T17:58:07.130 回答