Что такое Bean Validation?
Bean Validation (спецификация Jakarta Bean Validation, ранее JSR 380) — это стандартный фреймворк для валидации данных в Java-приложениях. Он позволяет декларативно описывать правила проверки полей, методов и классов с помощью аннотаций. Наиболее популярная реализация — Hibernate Validator.
Зачем нужна валидация?
В любом приложении, работающем с пользовательским вводом, необходимо проверять данные: не пустая ли строка, попадает ли число в диапазон, корректен ли email. Ручная проверка с помощью if-else делает код громоздким и трудно поддерживаемым. Bean Validation решает эту проблему, вынося логику проверки в аннотации и обеспечивая единообразную обработку ошибок.
Как установить
Если вы используете Maven, добавьте в pom.xml:
<dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId><version>8.0.1.Final</version></dependency>Для Gradle:
implementation 'org.hibernate.validator:hibernate-validator:8.0.1.Final'В Spring Boot валидация уже предустановлена.
Основные функции
- Стандартные аннотации: @NotNull, @Size, @Min, @Max, @Email, @Pattern, @Positive, @NotBlank и другие.
- Группы валидации: позволяют применять разные правила в зависимости от контекста (например, создание vs обновление).
- Кастомные валидаторы: можно создать свою аннотацию и написать логику проверки.
- Валидация параметров методов: проверка аргументов и возвращаемых значений.
Пример кода на Java
import jakarta.validation.constraints.*;
import jakarta.validation.*;
public class User {
@NotBlank(message = "Имя не может быть пустым")
private String name;
@Email(message = "Некорректный email")
private String email;
@Min(18) @Max(120)
private int age;
// геттеры и сеттеры
}
// Использование
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
User user = new User();
user.setEmail("invalid");
Set<ConstraintViolation<User>> violations = validator.validate(user);
for (ConstraintViolation<User> violation : violations) {
System.out.println(violation.getMessage());
}Когда использовать
Bean Validation применяется в REST API (Spring Boot, Jakarta EE), веб-формах, DTO-объектах, а также при работе с базами данных. Она незаменима, если вы хотите гарантировать целостность данных на уровне Java-кода до их сохранения. Рекомендуется для всех проектов, где есть пользовательский ввод или интеграция с внешними системами.