Рубрики
Без рубрики

Проверка параметров запроса и переменных пути в Spring

Узнайте, как проверить параметры запроса и переменные пути с помощью Spring MVC

Автор оригинала: baeldung.

1. введение

В этом уроке мы рассмотрим, как проверить параметры HTTP-запроса и переменные пути в Spring MVC.

В частности, мы проверим String и Number параметры с помощью JSR 303 аннотаций .

Чтобы изучить валидацию других типов, обратитесь к нашим учебным пособиям о валидации Java Bean и ограничениях методов или узнайте, как создать свой собственный валидатор .

2. Конфигурация

Чтобы использовать Java Validation API, мы должны добавить реализацию JSR 303, такую как hibernate-validator :


    org.hibernate.validator
    hibernate-validator
    6.0.10.Final

Кроме того, мы должны включить проверку как параметров запроса, так и переменных пути в наших контроллерах, добавив @Validated аннотацию :

@RestController
@RequestMapping("/")
@Validated
public class Controller {
    // ...
}

Важно отметить, что для включения проверки параметров также требуется MethodValidationPostProcessor bean . Если мы используем приложение Spring Boot, то этот компонент автоматически настраивается, если у нас есть зависимость hibernate-validator от нашего пути к классу.

В противном случае в стандартном приложении Spring мы должны добавить этот компонент явно:

@EnableWebMvc
@Configuration
@ComponentScan("com.baeldung.spring")
public class ClientWebConfigJava implements WebMvcConfigurer {
    @Bean
    public MethodValidationPostProcessor methodValidationPostProcessor() {
        return new MethodValidationPostProcessor();
    }
    // ...
}

Любая ошибка во время проверки пути или запроса в Spring по умолчанию приводит к ответу HTTP 500. В этом уроке мы используем пользовательскую реализацию ControllerAdvice для обработки такого рода ошибок более читаемым способом и возвращаем HTTP 400 для любого плохого запроса. Исходный код этого решения можно найти на сайте GitHub.

3. Проверка параметров запроса

Давайте рассмотрим пример, когда мы передаем числовой день недели в метод контроллера в качестве параметра запроса:

@GetMapping("/name-for-day")
public String getNameOfDayByNumber(@RequestParam Integer dayOfWeek) {
    // ...
}

Наша цель состоит в том, чтобы убедиться, что значение DayOfWeek находится между 1 и 7. И для этого мы будем использовать аннотации @Min и @Max :

@GetMapping("/name-for-day")
public String getNameOfDayByNumber(@RequestParam @Min(1) @Max(7) Integer dayOfWeek) {
    // ...
}

Любой запрос, который не соответствует этим условиям, вернет HTTP status 400 с сообщением об ошибке по умолчанию.

Если мы вызовем http://| localhost:8080/name-for-day?DayOfWeek=24 , например, ответное сообщение будет:

getNameOfDayByNumber.dayOfWeek: must be less than or equal to 7

Мы можем изменить сообщение по умолчанию, добавив пользовательское:

@Max(value = 1, message = "day number has to be less than or equal to 7")

4. Проверка вариабельности пути

Как и в случае с @ RequestParam, мы можем использовать любую аннотацию из пакета javax.validation.constraints для проверки @PathVariable .

Давайте рассмотрим пример, в котором мы проверяем, что строковый параметр не является пустым и имеет длину меньше или равную 10:

@GetMapping("/valid-name/{name}")
public void createUsername(@PathVariable("name") @NotBlank @Size(max = 10) String username) {
    // ...
}

Любой запрос с параметром name длиной более 10 символов, например, приведет к ошибке HTTP 400 с сообщением:

createUser.name:size must be between 0 and 10

Сообщение по умолчанию можно легко перезаписать, установив параметр message в аннотации @Size .

5. Заключение

В этой статье мы узнали, как проверить как параметры запроса, так и переменные пути в приложениях Spring.

Как всегда, весь исходный код доступен на GitHub .