Выбор ответа Junior Spring MVC и REST спрашивают часто обновлено

Валидация не срабатывает

Вопрос

На DTO стоят @NotBlank и @Email, но пустое тело запроса спокойно доходит до сервиса. Что вероятнее всего забыли?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: @Valid на параметре @RequestBody. Аннотации ограничений сами ничего не делают: Spring запускает Bean Validation для аргумента только если на нём стоит @Valid или @Validated.

Варианты ответа

  1. @Component на классе DTO
  2. @ResponseBody на методе контроллера
  3. @Valid на параметре @RequestBodyправильный ответ
  4. Сделать DTO record вместо класса

Разбор

Аннотации ограничений сами ничего не делают: Spring запускает Bean Validation для аргумента только если на нём стоит @Valid или @Validated. Ещё нужна зависимость spring-boot-starter-validation. DTO не должен быть бином, record для валидации не обязателен.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.