Similar presentations:
спаси сохрани ХОЧУ АВТОМАТ-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
Презентация закончилась...