#java #spring #spring-mvc #object
#java #spring #spring-mvc #объект
Вопрос:
Если у меня есть код, в котором:
@RequestParam(value = "amount", required = false) Integer amount
это один из моих параметров, что я могу сделать, чтобы пользователь не присваивал «пустое» значение этому параметру?
Например: предположим, что они запросили в Postman URLhttp://localhost:8080/myproject?amount = точно так же, без присвоения значения этому параметру. Как я могу проверить это в своем коде и запретить им присваивать пустое значение целочисленному объекту? Я имею в виду, что required действительно должно быть определено как false — поскольку нет необходимости сообщать этот параметр — но, если он указан, он не может получить пустое значение. Если бы этот параметр был объектом строкового типа, я знаю, что мог бы просто написать простой
if (amount.isEmpty()) {
...
}
но поскольку она имеет целочисленный тип, я не знаю, как ее проверить, потому что переменная не равна null (поскольку она была указана в URL), хотя значение не будет присвоено.
Короче говоря: я хочу, чтобы они были разрешены при вызове URL:
http://localhost:8080/myproject
http://localhost:8080/myproject?amount=2222
Но не это:
Комментарии:
1. Spring MVC не сможет преобразовать параметр запроса и выдать исключение, и, вероятно, вернет 400 обратно клиенту. Вы пробовали нажимать на этот неверный URL? Что произошло?
2.
http://localhost:8080/myproject?amount
я думаю, будет установлено значение amount = null. Или это происходит в моем проекте.3. @Savior это ничего не делает. Spring не показывает ошибки.
4. И каково значение
amount
?5. Вы пробовали устанавливать точку останова в этом методе контроллера и видеть, что происходит в отладчике? Это лучший способ определить, как он на самом деле анализирует эти различные входные данные.
Ответ №1:
Если в URL не передано значение amount http://localhost:8080/myproject?amount=
, по умолчанию amount
значением будет null, поскольку целое число может содержать нулевое значение
@RequestMapping("/create3")
public String create3(@RequestParam Integer amount){
if(amount == null){
//return bad request
}
System.out.println("amount: " amount);
return "Done";
}