一尘不染

是否有可能使空的RequestParam值使用defaultValue?

spring-mvc

如果我有一个类似于以下内容的请求映射:

@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public void test(@RequestParam(value = "i", defaultValue = "10") int i) {
}

然后使用以下命令调用此请求:

http://example.com/test?i=

我收到错误消息

无法将’java.lang.String’类型的值转换为’int’类型;嵌套的异常是java.lang.NumberFormatException:对于输入字符串:“”

我可以通过停止javascript客户端发送空参数或接受字符串值并仅在未发现空白的情况下进行解析来解决此问题。

更新 :spring的更高版本现在实现了最初想要的行为。

我刚刚在spring4.3.5中对此进行了测试,发现该行为实际上实际上会将null值转换为默认值而不会引发NumberFormatException,因此;我原来的映射现在可以正常工作了。

我不确定此行为更改是在哪个版本的spring上进行的。


阅读 534

收藏
2020-06-01

共1个答案

一尘不染

您可以将@RequestParam类型更改为Integer并使它不是必需的。这将使您的请求成功,但是它将为null。您可以在controller方法中将其显式设置为默认值:

@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public void test(@RequestParam(value = "i", required=false) Integer i) {
    if(i == null) {
        i = 10;
    }
    // ...
}

我从上面的示例中删除了defaultValue,但是如果希望收到根本没有设置的请求,则可能要包括它:

http://example.com/test
2020-06-01