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 不能为null
employees[1].phone 需要匹配正则表达式"\d{3}-\d{3}-\d{4}"
employees[0].phone 需要匹配正则表达式"\d{3}-\d{3}-\d{4}"
总结
通过使用@valid可以实现递归验证,上篇中验证引用对象,本节实现验证集合中对象。