Объявление правил:
public record CreateUserRequest(
@NotBlank @Size(max = 80) String name,
@NotBlank @Email String email,
@Valid @NotNull AddressDto address,
@Size(max = 10) List<@NotBlank String> tags) {}
Проверка: @PostMapping ... create(@Valid @RequestBody CreateUserRequest req). При нарушении Spring бросает MethodArgumentNotValidException (для @RequestBody) или HandlerMethodValidationException (Spring 6.1+, для параметров метода); по умолчанию — 400.
Единый ответ: в @RestControllerAdvice превращать MethodArgumentNotValidException в ProblemDetail со списком ошибок полей (field, message), чтобы клиент мог подсветить их в форме.
Группы и параметры: @Validated(OnCreate.class) — разные правила для создания и изменения; @Validated на классе сервиса — проверка параметров методов (@NotNull, @Min на аргументах).
Где граница: аннотации — для формата и обязательности. Правила, требующие данных (email уже занят, товар закончился), — в сервисе с понятным исключением (409, 422). Свои ограничения — аннотация + ConstraintValidator.