有没有可能使空的RequestParam值使用defaultValue?

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

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

然后通过以下方式调用此请求:

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

我收到错误消息

无法将types'java.lang.String'的值转换为types'int'; 嵌套exception是java.lang.NumberFormatException:对于inputstring:“”'

我可以通过停止JavaScript客户端发送空参数,或接受string值,只有parsing,如果他们没有发现是空白的解决这个问题。

更新 :spring的更高版本现在实现最初所需的行为。

我刚刚在春季4.3.5testing过,发现现在的行为实际上将空值转换为默认值,而不会引发NumberFormatException , 我原来的映射现在工作正常。

我不确定这个行为改变的spring是哪个版本。

您可以将@RequestParamtypes更改为Integer并使其不是必需的。 这将允许您的请求成功,但它将是空的。 您可以在控制器方法中明确地将其设置为默认值:

 @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 

你可以通过设置默认值来保留原始types,在你的情况下只需添加“required = false”属性:

 @RequestParam(value = "i", required = false, defaultValue = "10") int i 

PS来自Spring文档的这个页面可能很有用: 注释typesRequestParam

你也可以做这样的事情 –

  @RequestParam(value= "i", defaultValue = "20") Optional<Integer> i 

你可以设置RequestParam,使用generics类Integer而不是int,它将解决你的问题。

  @RequestParam(value= "i", defaultValue = "20") Integer i