2012-05-02 70 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。

你既可以遍歷乘客名單和驗證各要素或驗證對象擁有列表(在你原來的例子)。