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

来源:互联网 发布:淘宝网怎么装修店铺 编辑:程序博客网 时间:2024/06/06 01:39

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<Employee> employees;    @NotNull    private String name;    public Department(String name, List<Employee> 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<ConstraintViolation<Department>> 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 不能为nullemployees[1].phone 需要匹配正则表达式"\d{3}-\d{3}-\d{4}"employees[0].phone 需要匹配正则表达式"\d{3}-\d{3}-\d{4}"

总结

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

原创粉丝点击