если у меня есть сопоставление запроса, подобное следующему:
@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 и обнаружил, что теперь поведение фактически превратит нулевое значение в значение по умолчанию без повышения a NumberFormatException
, таким образом; мое исходное отображение теперь работает нормально.
Я не уверен, в какой версии весны было сделано это изменение поведения.
источник
String
типа. user902383, это правильно, хотя для целочисленного значения я бы предпочел, чтобы вместо значения null / empty использовалось defaultValue.Ответы:
Вы можете изменить тип @RequestParam на Integer и сделать его необязательным. Это позволит вашему запросу быть успешным, но тогда он будет нулевым. Вы можете явно установить для него значение по умолчанию в методе контроллера:
Я удалил defaultValue из приведенного выше примера, но вы можете включить его, если ожидаете получать запросы, где оно вообще не установлено:
источник
Вы можете сохранить примитивный тип, установив значение по умолчанию, в вашем случае просто добавьте свойство "required = false" :
PS Эта страница из документации Spring может быть полезна: Тип аннотации RequestParam
источник
/test?i=
и, посколькуi
он пуст, имеет значение по умолчанию.defaultValue
было предоставлено,required == false
неявноdefaultValue
, не вступает в силу.Вы можете установить RequestParam, используя общий класс Integer вместо int, это решит вашу проблему.
источник
Вы также можете сделать что-то вроде этого -
источник
В 2013 году это считалось ошибкой: https://jira.spring.io/browse/SPR-10180.
и был исправлен в версии 3.2.2. После этого проблема не должна возникать ни в одной из версий, и ваш код должен работать нормально.
источник