2.80M

спаси сохрани ХОЧУ АВТОМАТ-3-2

1.

Валидация данных в Spring
Презентация подготовлена
студенты группы ПИ24-3:
Казарян А.Д.
Ливанов О.А.

2.

Почему нельзя доверять входным данным?
2
0 1 . 1 0 . 2 0 2 6
• Клиент может прислать: null, пустую строку,
отрицательный возраст, битый email
• Без валидации «мусор» попадает в бизнеслогику и БД
• Пример: регистрация пользователя с пустым
именем или email без @
• Цель: отсекать некорректные данные на входе

3.

Что такое Jakarta Bean Validation?
3
0 1 . 1 0 . 2 0 2 6
Bean Validation - стандартная спецификация Java для
валидации данных. Современное же название - Jakarta
Validation (имя пакета jakarta.validation)
• Позволяет описывать правила декларации - прямо на
полях DTO
• Реализация по умолчанию - Hibernate Validator
• Вместо ручных if - аннотации: @NotNull, @Email, @Size и
прочие
• Валидация именно формата данных, а НЕ бизнес-логики

4.

Подключение зависимости
4
0 1 . 1 0 . 2 0 2 6

5.

Таблица аннотаций
5
0 1 . 1 0 . 2 0 2 6

6.

Где ставить @Valid? DTO и контроллер
6
Тело запроса (@RequestBody) →
ставим @Valid прямо перед параметром.
Параметры пути и запроса
(@PathVariable, @RequestParam) →
нужна @Validated на классе контроллера.
Формы (@ModelAttribute) →
ставим @Valid перед параметром.
Зачем это нужно? Spring перехватывает
запрос до входа в метод. Если данные
невалидны — клиент сразу получает 400 Bad
Request, и бизнес-логика не запускается.
0 1 . 1 0 . 2 0 2 6

7.

Где ставить @Valid? DTO и контроллер
7
Тело запроса (@RequestBody) →
ставим @Valid прямо перед параметром.
Параметры пути и запроса
(@PathVariable, @RequestParam) →
нужна @Validated на классе контроллера.
Формы (@ModelAttribute) →
ставим @Valid перед параметром.
Зачем это нужно? Spring перехватывает
запрос до входа в метод. Если данные
невалидны — клиент сразу получает 400 Bad
Request, и бизнес-логика не запускается.
0 1 . 1 0 . 2 0 2 6

8.

Что происходит при ошибке?
8
Spring не заходит в тело метода, если валидация
провалилась.
Вместо метода
выбрасывается MethodArgumentNotValidException.
По умолчанию Spring отдаёт клиенту стандартный
JSON без деталей.
Клиент видит только 400 Bad Request — но не знает,
какое поле неверное.
Вывод: нужен свой обработчик (следующий слайд).
0 1 . 1 0 . 2 0 2 6

9.

Единый формат ответа про ошибке
@RestControllerAdvice
9
@RestControllerAdvice — глобальный
перехватчик исключений для всех
контроллеров.
@ExceptionHandler(MethodArgumentNo
tValidException.class) — ловим
конкретное исключение.
Из BindingResult достаём
список FieldError.
Возвращаем Map<поле, сообщение> в
формате JSON.
Клиент всегда получает понятный ответ,
независимо от контроллера.
0 1 . 1 0 . 2 0 2 6

10.

Три условных сценария
10
0 1 . 1 0 . 2 0 2 6

11.

Итог
11
0 1 . 1 0 . 2 0 2 6
• Валидация в Spring — декларативная. Правила
живут прямо в DTO, а не размазаны по if-ам в
сервисах.
• @Valid + аннотации закрывают 90%
задач. @NotNull, @NotBlank, @Email, @Size, @
Min — этого достаточно в большинстве случаев.
• @RestControllerAdvice делает API
предсказуемым. Один класс — единый формат
ошибок для всех контроллеров.
• Подключение — одна зависимость. springboot-starter-validation и всё работает из
коробки.
• Валидируем DTO, а не Entity. И не забываем
про тесты на невалидные данные.

12.

12
Внатуре...
В принципе автомат можно дать только
Казаряну.............. (Ливанову не надо)
0 1 . 1 0 . 2 0 2 6
Презентация закончилась...
English     Русский Rules