有没有可能使空的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
- spring引导,logback和logging.config属性
- 为什么我们不能在spring自动assembly静态字段?
- 根据.properties文件中的属性导入Springconfiguration文件
- 我应该为业务层使用EJB3还是Spring?
- 在Spring-MVC控制器中触发404?
- 弹簧启动默认H2 jdbc连接(和H2控制台)
- 使用@PropertySource批注时,@Value未parsing。 如何configurationPropertySourcesPlaceholderConfigurer?
- 在应用程序启动时使用Spring MVC执行Java类
- 从持久存储装载exception加载会话