JSR 303-Jave Bean Validationでオブジェクトのコレクションを検証することは可能ですか?Jave Beanの検証では、コレクション自体に注釈はありませんが、含まれている要素には含まれていますか?
たとえば、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);
また、@NotEmpty
をコレクションに追加することもできます。
public class Car {
@NotEmpty(message="At least one passenger is required")
@Valid
private List<Person> passengers = new ArrayList<Person>();
}
これにより、少なくとも1人の乗客が存在し、@Valid
アノテーションにより、各Person
オブジェクトが検証されます。
もちろん、リストを繰り返し処理して、各要素でValidator.validateを呼び出すこともできます。または、リストをラッパーBeanに入れて、@ Validで注釈を付けます。検証のためにArrayListを拡張することは、私には間違っているようです。これで解決したい特定のユースケースはありますか?もしそうなら、もう少し説明できるかもしれません。最初の質問に答えるには:
JSR 303-Jave Bean Validationでオブジェクトのコレクションを検証することは可能ですか?Jave Beanの検証では、コレクション自体に注釈はありませんが、含まれている要素には含まれていますか?
番号
この汎用クラスを作成しました。
public class ValidListWrapper<T> {
@Valid
private List<T> list;
public ValidListWrapper(List<T> list) {
this.list = list;
}
public List<T> getList() {
return list;
}
}
Jacksonライブラリを使用してJSONを逆シリアル化する場合は、@JsonCreator
コンストラクターの注釈とJacksonは、JSON配列をラッパーオブジェクトに自動的に逆シリアル化します。