50

JSR 303 - Jave Bean Validation でオブジェクトのコレクションを検証することは可能ですか? コレクション自体には注釈がなく、含まれる要素には含まれていますか?

たとえば、2 人目の名前が null であるために制約違反が発生する可能性はありますか?

List<Person> people = new ArrayList<Person>();
people.add(new Person("dave"));
people.add(new Person(null));

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

5 に答える 5

67

はい、@Validコレクションに追加してください。

Hibernate Validator Reference の例を次に示します。

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

これは標準の JSR-303 の動作です。仕様のセクション 3.1.3 を参照してください。

于 2011-08-21T03:32:01.993 に答える
22

@NotEmptyコレクションに追加することもできます。

public class Car {
  @NotEmpty(message="At least one passenger is required")
  @Valid
  private List<Person> passengers = new ArrayList<Person>();
}

これにより、少なくとも 1 人の乗客が存在することが保証され、@Valid注釈によって各Personオブジェクトが検証されることが保証されます。

于 2012-03-13T11:25:28.413 に答える
3

You can of course also just iterate over the list and call Validator.validate on each element. Or put the List into some wrapper bean and annotate it with @Valid. Extending ArrayList for validation seems wrong to me. Do you have a particular use case you want to solve with this? If so maybe you can explain it a little more. To answer your initial question:

Is it possible to validate a collection of objects in JSR 303 - Jave Bean Validation where the collection itself does not have any annotations but the elements contained within do?

No

于 2010-11-07T12:36:36.823 に答える