Java数据验证:库与工具概览

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java数据验证:关键库与工具概览



数据验证是任何应用程序开发中最重要的阶段之一。不正确或恶意的数据进入系统可能导致错误、漏洞和数据丢失。在Java中,有多个强大的库可以帮助自动化和标准化这一过程。本文将介绍主要的验证工具、它们的特点以及使用示例。



1. Jakarta Bean Validation(原JSR 380 / Bean Validation 2.0)



这是Java对象验证的事实标准。它定义了一组可以放置在字段、方法和类上的注解。最流行的实现是Hibernate Validator。



主要注解:

  • @NotNull — 检查值是否为非null。
  • @NotEmpty — 用于字符串、集合或数组:非null且非空。
  • @NotBlank — 字符串非null且至少包含一个非空白字符。
  • @Size(min, max) — 限制字符串长度或集合大小。
  • @Min / @Max — 数值边界。
  • @Pattern(regexp) — 正则表达式验证。
  • @Email — 电子邮件格式验证。


使用示例:

import jakarta.validation.constraints.*;

public class User { @NotBlank(message = "姓名不能为空") private String name;

@Email(message = "电子邮件格式不正确") @NotBlank private String email;

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

// getters and setters}


如何执行验证:

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(""); // 空姓名 user.setEmail("invalid"); user.setAge(150);

Set<ConstraintViolation<User>> violations = validator.validate(user); for (ConstraintViolation<User> v : violations) { System.out.println(v.getPropertyPath() + ": " + v.getMessage()); } }}


优点:标准化方法,与Spring和Jakarta EE集成,支持自定义注解。



2. Apache Commons Validator



Apache提供的库,包含一组针对常见数据类型(电子邮件、URL、信用卡、IP地址等)的现成验证器。与Bean Validation不同,它没有注解——验证通过调用静态方法进行。



示例:

import org.apache.commons.validator.routines.*;

public class CommonsValidatorExample { public static void main(String[] args) { EmailValidator emailValidator = EmailValidator.getInstance(); System.out.println(emailValidator.isValid("test@example.com")); // true

UrlValidator urlValidator = new UrlValidator(); System.out.println(urlValidator.isValid("https://pythonlib.ru")); // true

CreditCardValidator ccValidator = CreditCardValidator.getInstance(); System.out.println(ccValidator.isValid("4111111111111111")); // true (Visa) }}


优点:集成简单,无需配置,适合一次性检查。



3. OVal(对象验证框架)



灵活的库,支持注解和程序化配置。允许定义复杂的验证规则,包括跨字段和依赖关系。



使用注解的示例:

import net.sf.oval.constraint.*;

public class Order { @NotNull

推荐