質問

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

たとえば、2人目のヌル名のためにこれが制約違反をもたらす可能性はありますか。

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);
役に立ちましたか?

解決

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

ここは Hibernate Valibator Referenceから。

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

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

他のヒント

あなた、追加することもできます @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の検証でオブジェクトのコレクションを検証することは可能ですか?コレクション自体に注釈がないが、その中に含まれる要素が含まれていますか?

いいえ

私はこの一般的なクラスを書きました:

public class ValidListWrapper<T> {

    @Valid
    private List<T> list;

    public ValidListWrapper(List<T> list) {
        this.list = list;
    }

    public List<T> getList() {
        return list;
    }

}

ジャクソンライブラリを使用してJSONを脱復する場合は、追加できます @JsonCreator コンストラクターとジャクソンでの注釈は、JSONアレイをラッパーオブジェクトに自動的にゆったりさせます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top