javaBean验证框架(8)—使用@valid实现集合验证

javaBean验证框架(8)—使用@valid实现集合验证

和对象引用一样,可以通过@valid实现递归验证,java中Collections, arrays ,Iterable的元素也都可以用@valid实现递归引用。

示例说明

先定义Employee类和Department类,部门拥有多个员工。

Employee类

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

public class Employee {
    @NotNull
    private String name;
    @Pattern(regexp = "\\d{3}-\\d{3}-\\d{4}")
    private String phone;

    public Employee(String name, String phone) {
        this.name = name;
        this.phone = phone;
    }
}

Department类

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;

public class Department {
    @NotNull
    @Valid
    private List employees;
    @NotNull
    private String name;

    public Department(String name, List employees) {
        this.employees = employees;
        this.name = name;
    }
}

定义应用验证主类。

import com.dataz.entity.Department;
import com.dataz.entity.Employee;

import javax.validation.*;
import java.text.ParseException;
import java.util.Arrays;
import java.util.Set;

public class ValidationDemo5 {
    public static void main(String[] args) throws ParseException {
        Employee e1 = new Employee(null, "333333");
        Employee e2 = new Employee("Jake", "abc");



        Department dept = new Department("Admin", Arrays.asList(e1, e2));

        Validator validator = createValidator();
        Set> violations = validator.validate(dept);
        if (violations.size() == 0) {
            System.out.println("No violations.");
        } else {
            System.out.printf("%s violations:%n", violations.size());
            violations.stream()
                    .forEach(ValidationDemo5::printError);
        }
    }

    private static void printError(ConstraintViolation violation) {
        System.out.println(violation.getPropertyPath()
                + " " + violation.getMessage());
    }

    public static Validator createValidator() {
        Configuration config = Validation.byDefaultProvider().configure();
        ValidatorFactory factory = config.buildValidatorFactory();
        Validator validator = factory.getValidator();
        factory.close();
        return validator;
    }
}

运行结果:

3 violations:
employees[0].name 不能为null
employees[1].phone 需要匹配正则表达式"\d{3}-\d{3}-\d{4}"
employees[0].phone 需要匹配正则表达式"\d{3}-\d{3}-\d{4}"

总结

通过使用@valid可以实现递归验证,上篇中验证引用对象,本节实现验证集合中对象。

你可能感兴趣的:(javaBean验证框架(8)—使用@valid实现集合验证)