if I have a a request mapping similar to the following:
@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public void test(@RequestParam(value = "i", defaultValue = "10") int i) {
}
And then call this request with:
http://example.com/test?i=
I get the error message
Failed to convert value of type 'java.lang.String' to type 'int'; nested exception is java.lang.NumberFormatException: For input string: ""'
I can solve this by either stopping the javascript client from sending empty parameters, or by accepting string values and only parsing if they are not found to be blank.
UPDATE: Later versions of spring now implement the originally desired behaviour.
I've just tested this in spring 4.3.5 and have found that the behaviour will now in fact turn the null value into the default value without raising a NumberFormatException
, thus; my original mapping now works fine.
I am not sure which version of spring this behavioural change was made.
This question is related to
java
spring
spring-mvc
You can keep primitive type by setting default value, in the your case just add "required = false" property:
@RequestParam(value = "i", required = false, defaultValue = "10") int i
P.S. This page from Spring documentation might be useful: Annotation Type RequestParam
You can set RequestParam, using generic class Integer instead of int, it will resolve your issue.
@RequestParam(value= "i", defaultValue = "20") Integer i
You can also do something like this -
@RequestParam(value= "i", defaultValue = "20") Optional<Integer> i
This was considered a bug in 2013: https://jira.spring.io/browse/SPR-10180
and was fixed with version 3.2.2. Problem shouldn't occur in any versions after that and your code should work just fine.
Source: Stackoverflow.com