Возможно ли, чтобы пустые значения 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, таким образом; мое оригинальное отображение теперь работает нормально.



Я не уверен, какая версия весны это изменение поведения было сделано.

538   5  

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

    Ничего не найдено.