Bootstrap

java类各属性入库前的校验

使用 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 注解来触发验证,并通过异常处理来管理验证错误。
;