Вопрос с собеседования · Spring
Как проверять входные данные в Spring с помощью Bean Validation?
JuniorВалидация и обработка ошибок
Ещё спрашивают так:
- Что делают @NotBlank и @Size?
- Как вернуть понятную ошибку валидации?
Коротко
Ограничения ставят аннотациями на поля DTO: @NotNull, @NotBlank (строка не пустая), @Size(min, max), @Min/@Max, @Positive, @Email, @Pattern. В контроллере перед параметром тела — @Valid: при нарушении Spring бросает MethodArgumentNotValidException и отвечает 400. Формат ответа задают в @RestControllerAdvice — обычно ProblemDetail (RFC 9457) со списком полей и причин. Для вложенных объектов — @Valid на поле.
- Валидация входа — на границе (DTO), бизнес-правила — в сервисе
- @NotNull пропускает пустую строку, @NotBlank — нет
- Параметры пути и запроса проверяются при @Validated на классе контроллера
А ещё Клиенту возвращают, какое поле и почему не прошло, без стека исключения
Подробно
record CreateUser(
@NotBlank @Size(max = 100) String name,
@NotBlank @Email String email,
@Min(14) int age) {}
@PostMapping("/users")
ResponseEntity<UserDto> create(@Valid @RequestBody CreateUser req) { ... }
@RestControllerAdvice
class Errors {
@ExceptionHandler(MethodArgumentNotValidException.class)
ProblemDetail invalid(MethodArgumentNotValidException e) {
var pd = ProblemDetail.forStatus(400);
pd.setProperty("errors", e.getFieldErrors().stream()
.map(f -> Map.of("field", f.getField(), "message", f.getDefaultMessage()))
.toList());
return pd;
}
}Что хотят услышать
- Аннотации ограничений на DTO.
- @Valid и ответ 400.
- @RestControllerAdvice и ProblemDetail.
- Разница NotNull и NotBlank.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Аннотации проверяются всегда, даже без @Valid: Hibernate Validator встроен в Jackson
- ✗@NotNull отклоняет и null, и пустую строку, поэтому @NotBlank обычно не нужен
- ✓Ограничения на полях DTO и @Valid на параметре тела; при нарушении — 400
- ✗При ошибке валидации стоит возвращать 500 со стеком исключения
Связанные вопросы
Партнёр платформы
Разбор собеседования
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.