Как проверить, является ли целочисленная переменная типа @RequestParam в Spring «пустой»?

#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

Но не это:

http://localhost:8080/myproject?amount =

Комментарии:

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";
    }