Spring Boot проверяет параметры запроса - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь изучить Spring Boot и работаю над простым REST API, который я разрабатываю простой калькулятор.

У меня есть класс обслуживания, помеченный @Service, и у него есть простой метод

public double calculate(String operation, double num1, double num2) {
        ...
}

И я вызываю этот метод из контроллера, как

@GetMapping("/calculate")
public double calculate(@RequestParam(value = "op") String op,
                        @RequestParam(value = "num1") double num1,
                        @RequestParam(value = "num2") double num2) {

    return calculatorService.calculate(op, num1, num2);
}

Я хочу проверить эти параметры (независимо от того, являются ли num1 и num2 числовыми и все параметры должны быть не нулевыми). Какова лучшая практика для проверки параметров запроса для Spring Boot?

Ответы [ 2 ]

1 голос
/ 06 марта 2019

Это зависит от того, какую проверку вы хотите выполнить.

Один из способов - использовать аннотации проверки для самих параметров.

Например, @NotNull, @Min, @Max и т. Д. Эти конкретные можно найти в javax.validation:validation-api, но есть много других (и вы можете создать свой собственный).

@GetMapping("/calculate")
public double calculate(@RequestParam(value = "op") @NotNull String op,
                        @RequestParam(value = "num1") double num1,
                        @RequestParam(value = "num2") double num2) {

Проверка @NotNull гарантирует, что op не является нулевым - вы можете использовать аннотацию @NotEmpty или @NotBlank, чтобы убедиться, что фактическое значение op имеет длину> 0 или обрезается длина> 0 соответственно.

Как указывает Кристиан Колорадо в своем комментарии ниже, Spring автоматически не пройдет валидацию (или сопоставление конечной точки), если либо num1, либо num2 не являются действительными двойными значениями.

0 голосов
/ 06 марта 2019

Как вы сказали, что вы хотите проверить только Number @ NumberFormat Аннотация есть. Аннотация @NumberFormat применяется к подклассам java.lang.Number (целое число, число с плавающей запятой, Double, BigDecimal и т. Д.)

@NumberFormat(style=Style.NUMBER)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...