Spring MVC - 缺少字段的HTTP状态代码400(错误请求),定义为不需要

Ale*_*eld 8 spring spring-mvc spring-annotations

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

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

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

HTTP Status 400 - Required Long parameter 'number' is not present
Run Code Online (Sandbox Code Playgroud)

尽管控制器方法注解明确规定-parameter为"数字" 必需的.

有没有人对可能发生的事情略有了解?

谢谢.

PS:抛出的异常如下:

org.springframework.web.bind.MissingServletRequestParameterException: Required Long parameter 'number' is not present
Run Code Online (Sandbox Code Playgroud)

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

Yoh*_*age 16

我遇到了相同的情况,当请求中的参数出现空值时会发生这种情况.

也就是说,如果您的POST主体包含"number ="(空值),那么Spring会抛出此异常.但是,如果请求中根本不存在该参数,则它应该没有任何错误.

  • 这也发生在 Spring 4.1 中。但是,如果您在 `RequestParam` 注释中设置了 `defaultValue`,则不会抛出异常。 (2认同)