Вопрос с собеседования · 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 минут бесплатно.

Разбор собеседования