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<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可以实现递归验证,上篇中验证引用对象,本节实现验证集合中对象。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值