什么是 Bean Validation?
Bean Validation(Jakarta Bean Validation 规范,前身为 JSR 380)是一个用于 Java 应用程序数据验证的标准框架。它允许通过注解声明性地描述字段、方法和类的检查规则。最流行的实现是 Hibernate Validator。
为什么需要验证?
在任何处理用户输入的应用程序中,都需要检查数据:字符串是否为空,数字是否在范围内,电子邮件是否有效。使用 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 = "无效的电子邮件") private String email;
@Min(18) @Max(120) private int age;
// getter 和 setter 方法}
// 使用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)、Web 表单、DTO 对象以及与数据库交互时。如果您希望在数据持久化之前在 Java 代码级别保证数据完整性,它是必不可少的。建议所有涉及用户输入或与外部系统集成的项目都使用它。