【问题标题】:Avoiding POST requests resulting in "400 - Bad Request" status code in Spring MVC避免 POST 请求导致 Spring MVC 中的“400 - Bad Request”状态代码
【发布时间】:2013-07-25 11:58:37
【问题描述】:

我有一个使用注解配置的 Spring MVC 应用程序。我的测试控制器如下所示:

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

当用户向此控制器发布数据并且未输入有效的长数字(“someNumber”)时,Spring MVC 会以 400 - Bad Request HTTP 状态代码进行响应。我的应用程序没有机会对该错误做出反应。

这个问题通常是如何处理的?

【问题讨论】:

    标签: spring jakarta-ee spring-mvc


    【解决方案1】:

    我认为处理此问题的最佳方法是在 RequestParam 注释中添加“必需”参数。

    @RequestParam(value="name", required=false)
    

    http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/bind/annotation/RequestParam.html

    【讨论】:

    • 更有趣的是,如果我不为参数“name”输入任何内容,我会得到“HTTP Status 400 - Required Long parameter 'name' is not present”,尽管它被定义为以下方法签名不需要: public String addNumber(@RequestParam(value = "name", required = false) Long name)
    • 刚刚用签名测试了这个解决方案 addNumber(@RequestParam(value="name", required=false) 。 URLs /simple/list 和 /simple/list?name= set name to null, /simple /list?name=123 将名称设置为 123。将尝试使用 POST。
    • 适用于我的 POST 方法和重定向。无参数测试,name= 和 name=123。
    • 这是 3.2.3 版本的回归。我用 3.2.2.jira.springsource.org/browse/SPR-10592 测试过
    【解决方案2】:

    一种解决方案是为您的参数声明一个默认值,然后在应用程序代码中检查:

    @RequestParam(value="name", defaultValue="-1")
    

    或者,如果没有任何默认值,请使用@diafour 的答案,您将获得null 值。

    【讨论】:

      猜你喜欢
      • 2019-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 2014-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多