如果我有一个类似于下面的a请求映射:
@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现在实现了最初想要的行为。
我刚刚在spring 4.3.5中测试了这一点,并发现该行为现在实际上会将null值转换为默认值,而不会引发NumberFormatException
,因此;我的原始映射现在工作得很好。
我不确定这种行为变化是由哪个版本的spring造成的。
发布于 2012-09-22 08:18:45
您可以将@RequestParam类型更改为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
发布于 2014-02-20 16:40:03
您可以通过设置默认值来保留原语类型,在本例中只需添加"required = false"属性:
@RequestParam(value = "i", required = false, defaultValue = "10") int i
备注: Spring文档中的这个页面可能会很有用:Annotation Type RequestParam
发布于 2017-02-19 17:38:25
您可以设置RequestParam,使用泛型类Integer而不是int,它将解决您的问题。
@RequestParam(value= "i", defaultValue = "20") Integer i
https://stackoverflow.com/questions/12296642
复制相似问题