Bean Validation (Jakarta Validation) — Валидация данных в Java

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Что такое 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-кода до их сохранения. Рекомендуется для всех проектов, где есть пользовательский ввод или интеграция с внешними системами.

Рекомендаций