【发布时间】:2012-08-31 01:41:22
【问题描述】:
如果我有一个类似于以下的请求映射:
@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: For input string: ""'
我可以通过阻止 javascript 客户端发送空参数来解决这个问题,或者通过接受字符串值并仅在没有发现它们为空时进行解析。
更新:更高版本的 spring 现在实现了最初期望的行为。
我刚刚在 spring 4.3.5 中对此进行了测试,发现该行为现在实际上会将 null 值转换为默认值,而不会引发 NumberFormatException,因此;我的原始映射现在可以正常工作了。
我不确定这种行为改变是哪个版本的 spring。
【问题讨论】:
-
该参数肯定是一个整数类型来引发该异常?
-
我不是spring专家,但不设置时是否使用默认值?即如果您的请求是example.com/test?当您使用example.com/test?i= 时,i 存在并设置为“”,因此不使用默认值
-
感谢 amir75,不小心提供了
String类型。 user902383,这是正确的,但对于整数值,我更希望 null/空值使用 defaultValue。
标签: java spring spring-mvc