Валидация

Базовый Spring
≈ 1 мин чтения

Проверка входных данных до вызова сервиса

Десериализованный JSON ещё не означает корректный запрос. Поле может быть пустым, строка — слишком длинной, а число — выходить за допустимый диапазон. В Spring MVC такие правила удобно описывать через Jakarta Bean Validation прямо на DTO.

record CreateUserRequest(
        @NotBlank String name,
        @Email String email,
        @Min(18) int age) {}

@PostMapping("/users")
UserDto create(@Valid @RequestBody CreateUserRequest request) {
    return userService.create(request);
}

Аннотации @NotBlank, @Email и @Min задают ограничения для отдельных компонентов DTO. @Valid на аргументе контроллера запускает проверку объекта после его создания из запроса. Если данные не проходят ограничения, обычный вызов метода не продолжается.

Валидация не заменяет бизнес-правила

Проверка формата и простых ограничений хорошо подходит web-границе: обязательность поля, формат email, диапазон числа. Правила вроде «пользователь с таким email уже существует» обычно требуют обращения к состоянию приложения и остаются частью бизнес-логики.

Проверяй данные на подходящем уровне. Валидация DTO защищает HTTP-контракт, но не должна превращать DTO в место для всей логики предметной области.