使用 javax.validation.Validator
接口和 javax.validation.Validation
类来实现 Java 类属性的校验是一种标准的做法。以下是一个简单的示例,展示如何使用这些类来校验一个简单的 User
类的实例。
首先,确保您已经添加了 Bean Validation API 和其实现类(如 Hibernate Validator)的依赖到您的项目中。以下是 Maven 依赖的示例:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.2.Final</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.1-b08</version>
</dependency>
接下来,定义您的 User
类,并使用 Bean Validation 注解来指定校验规则:
import javax.validation.constraints.Email;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
public class User {
@NotBlank(message = "Name must not be blank")
@Size(min = 2, max = 30, message = "Name must be between 2 and 30 characters")
private String name;
@NotBlank(message = "Email must not be blank")
@Email(message = "Email should be valid")
private String email;
@Min(value = 18, message = "Age must be greater than or equal to 18")
private int age;
// Standard getters and setters
}
现在,您可以创建一个验证器,并使用它来校验 User
实例:
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.Set;
public class UserValidationTest {
public static void main(String[] args) {
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
User user = new User();
user.setName("Jo"); // Invalid name, too short
user.setEmail("invalid-email"); // Invalid email
user.setAge(17); // Invalid age, too young
Set<ConstraintViolation<User>> violations = validator.validate(user);
if (!violations.isEmpty()) {
for (ConstraintViolation<User> violation : violations) {
System.out.println(violation.getPropertyPath() + ": " + violation.getMessage());
}
} else {
System.out.println("User is valid");
}
}
}
在上述代码中,如果 User
实例的属性不符合注解定义的约束条件,validator.validate(user)
方法将返回一个 ConstraintViolation
集合。每个 ConstraintViolation
包含了关于违反约束的详细信息,包括违反的属性路径和违反信息。
特殊说明:
- 确保在进行验证之前已经设置了所有需要验证的属性值。
- 验证失败时,可以根据业务需求选择如何处理这些错误。在上面的示例中,我们只是简单地将它们打印到控制台。
- 在实际应用中,您可能需要将这些验证逻辑放在业务逻辑处理之前,例如,在将数据保存到数据库之前。
- 如果您在一个 Web 应用程序中使用 Spring 框架,您通常会在控制器层使用
@Valid
注解来触发验证,并通过异常处理来管理验证错误。