Java 数据验证:工具与库概览
数据验证(正确性检查)是任何应用程序开发的关键阶段之一。如果没有可靠的输入数据检查,应用程序将容易受到错误、异常行为以及攻击的影响。在 Java 中,有几种经过验证的方法和库,可以快速、灵活地实现验证,并且样板代码最少。
在本文中,我们将介绍 Java 中用于数据验证的主要工具:Bean Validation (Jakarta Validation) 标准、其最流行的实现 Hibernate Validator,以及替代方案 Apache Commons Validator。我们还将单独讨论针对简单情况的手动验证。
1. Bean Validation (Jakarta Validation) 标准
Bean Validation(以前是 JSR 380,现在是 Jakarta Validation)是一个规范,定义了一组用于声明式验证 Java 对象的注解。核心思想是:您使用注解在类的字段中直接描述验证规则,验证引擎会自动检查它们。
主要注解
@NotNull— 值不能为 null。@NotEmpty— 字符串、集合或数组不能为空(且不能为 null)。@NotBlank— 字符串不能为空或仅包含空格。@Size(min, max)— 限制字符串长度、集合或数组的大小。@Min/@Max— 数值限制。@Pattern(regexp = "...")— 根据正则表达式进行验证。@Email— 验证电子邮件地址格式。
使用示例
import jakarta.validation.constraints.*;
public class User { @NotBlank(message = "姓名不能为空") @Size(min = 2, max = 50) private String name;
@Email(message = "电子邮件格式不正确") @NotNull private String email;
@Min(18) @Max(120) private int age;
// getters 和 setters}要启动验证,请使用 Validator 对象:
import jakarta.validation.*;import java.util.Set;
public class ValidationExample { public static void main(String[] args) { ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); Validator validator = factory.getValidator();
User user = new User(); user.setName("A"); user.setEmail("invalid-email"); user.setAge(10);
Set<ConstraintViolation<User>> violations = validator.validate(user); for (ConstraintViolation<User> violation : violations) { System.out.println(violation.getMessage()); } }}2. Hibernate Validator — 标准的实现
Hibernate Validator 是 Bean Validation 规范的参考实现。它完全支持 Jakarta Validation 的所有注解,并添加了自己的扩展,例如 @URL、@CreditCardNumber、@ISBN 等。
附加功能
- 自定义验证器 — 您可以创建自己的注解和验证逻辑。
- 验证组 — 根据上下文(例如,创建 vs 更新)检查不同的规则集。
- 与 Spring Boot、Java EE / Jakarta EE 开箱即用集成。
自定义验证器示例
import jakarta.validation.Constraint;import jakarta.validation.Payload;import java.lang.annotation.*;
@Target({ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)@Constraint(validatedBy = PhoneValidator.class)public @interface ValidPhone { String message() default "电话号码格式不正确";