2012-05-02 1 views
2

JSR 303 Validation을 사용하여 빈 배열을 유효성을 검사하려고합니다. 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() 메서드는 전달 된 개체의 형식에 대해 선언 된 제약 조건의 유효성을 검사합니다. List 또는 ArrayList에 선언 된 제약 조건이 없기 때문에 목록을 직접 validate()으로 전달할 때 제약 조건 위반이 발생하지 않습니다.

승객 목록을 반복하고 개별 요소의 유효성을 검사하거나 목록을 소유 한 개체의 유효성을 검사 할 수 있습니다 (원래 예제처럼).