Возможно ли, чтобы пустые значения RequestParam использовали значение defaultValue?
Если у меня есть отображение запроса, подобное следующему:
@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public void test(@RequestParam(value = "i", defaultValue = "10") int i) {
}
а затем вызовите этот запрос с помощью:
http://example.com/test?i=
Я получаю сообщение об ошибке
не удалось преобразовать значение типа 'Java.ленг.Строка' для типа 'int'; вложенные исключением является Java.ленг.NumberFormatException: для входной строки: ""'
Я могу решить эту проблему, либо остановив клиент javascript от отправки пустых параметров, либо приняв строковые значения и только разбор, если они не найдены пустыми.
обновление: более поздние версии spring теперь реализуют первоначально желаемое поведение.
Я только что проверил это весной 4.3.5 и обнаружил, что поведение теперь фактически превратит нулевое значение в значение по умолчанию, не поднимая NumberFormatException, таким образом; мое оригинальное отображение теперь работает нормально.
Я не уверен, какая версия весны это изменение поведения было сделано.
5 ответов:
вы можете изменить тип @RequestParam на целое число и сделать его необязательным. Это позволит выполнить ваш запрос, но тогда он будет равен нулю. Вы можете явно установить его в значение по умолчанию в методе контроллера:
@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
вы можете сохранить примитивный тип, установив значение по умолчанию, в вашем случае просто добавьте "required = false" свойства:
@RequestParam(value = "i", required = false, defaultValue = "10") int iС. П. Эта страница из документации Spring может быть полезна: Тип Аннотации RequestParam
вы можете установить RequestParam, используя generic class Integer вместо int, это решит вашу проблему.
@RequestParam(value= "i", defaultValue = "20") Integer i
вы также можете сделать что - то вроде этого -
@RequestParam(value= "i", defaultValue = "20") Optional<Integer> i
Это считалось ошибкой в 2013 году:https://jira.spring.io/browse/SPR-10180
и была исправлена с версией 3.2.2. После этого проблема не должна возникать ни в каких версиях, и ваш код должен работать нормально.
Comments