2012-05-02 9 views
2

JSR 303 Validationを使用してBeanの配列を検証したいと考えています。 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()に渡すときに制約違反が発生しません。

乗客リスト全体を繰り返し、個々の要素を検証したり、元の例のようにリストを所有するオブジェクトを検証したりすることができます。

関連する問題