2012-05-02 35 views
2

我想验证使用JSR 303验证豆的阵列。就像spec说的那样,可以验证整个集合。 如果我反对这样的验证收集使用JSR 303

public class Car { 
    @NotNull 
    @Valid 
    private List<Person> passengers = new ArrayList<Person>(); 
} 

这样我就可以通过执行以下验证乘客的名单:

Car car = .... 
Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); 
Set<ConstraintViolation<Car>> validation = validator.validate(car); 

但我想知道,为什么我不能做验证乘客名单以下:

Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); 
Set<ConstraintViolation<List<Person>>> validation =validator.validate(passengers); 

它只是不工作!有人可以给我任何解释吗?

回答

2

Bean验证不直接验证集合提供了一个API。仅支持使用@Valid集合/数组的级联验证。

您正在使用的validate()方法验证上传递的对象的类型声明的约束。有没有对ListArrayList声明的约束,这就是为什么没有违反约束直接传递一个列表validate()时occure。

你既可以遍历乘客名单和验证各要素或验证对象拥有列表(在你原来的例子)。