首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否可以使用defaultValue使RequestParam值为空?

是否可以使用defaultValue使RequestParam值为空?
EN

Stack Overflow用户
提问于 2012-09-06 17:08:24
回答 6查看 267.2K关注 0票数 141

如果我有一个类似于下面的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造成的。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 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
票数 202
EN

Stack Overflow用户

发布于 2014-02-20 16:40:03

您可以通过设置默认值来保留原语类型,在本例中只需添加"required = false"属性:

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

备注: Spring文档中的这个页面可能会很有用:Annotation Type RequestParam

票数 115
EN

Stack Overflow用户

发布于 2017-02-19 17:38:25

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

   @RequestParam(value= "i", defaultValue = "20") Integer i
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12296642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档