Как в Java задать ограничения (constraints) для валидации данных?

«Как в Java задать ограничения (constraints) для валидации данных?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Java ограничения для валидации данных задаются с помощью аннотаций из спецификации Bean Validation (JSR 380), обычно из пакета javax.validation.constraints или jakarta.validation.constraints.

Основные аннотации:

  • @NotNull — значение не должно быть null.
  • @Size(min=, max=) — ограничение длины строки или размера коллекции.
  • @Min(value) и @Max(value) — ограничение для числовых значений.
  • @Email — проверка формата email.
  • @Pattern(regexp=) — проверка по регулярному выражению.

Пример класса сущности:

import javax.validation.constraints.*;

public class User {
    @NotNull(message = "Name cannot be null")
    @Size(min = 2, max = 50)
    private String name;

    @Min(18)
    @Max(120)
    private int age;

    @Email
    @NotNull
    private String email;
}

Проверка ограничений: Для валидации используется интерфейс Validator.

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();

User user = new User();
Set<ConstraintViolation<User>> violations = validator.validate(user);

for (ConstraintViolation<User> violation : violations) {
    System.out.println(violation.getMessage());
}

Почему это важно: Этот подход декларативен, отделяет правила валидации от бизнес-логики и стандартизирован, что позволяет использовать одни и те же аннотации на разных уровнях приложения (например, в DTO и сущностях JPA).