2

私はこれに似たクラスを持っています:

public Foo {

  @Valid
  private Bar bar;
  private Long barId;
}

クラス Foo を検証すると、クラス Bar も検証されます。しかし、Foo を検証するときにクラス Bar を検証したくない場合があります (たとえば、不適切な値を修正できない場合など)。これに似たことができますか:

@Valid(when="barId is null")

?

4

1 に答える 1

1

実際には、@Valid の条件はサポートされていません。回避策として、カスタム制約@ConditionalBarValidを定義してみてください。クラスレベルで適用できます:

@ConditionalBarValid
public Foo {

    private Bar bar;
    private Long barId;
}

したがって、制約バリデーターは Foo オブジェクト全体にアクセスでき、次のことが可能になります。

  • barId が null かどうかを確認する
  • Validator のインスタンスを取得し、 barオブジェクトの検証を強制します

ConditionalBarValidator.isValid (...)の実装は次のようになります。

// case when foo is not null and foo.getBarId is null
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
boolean validationResult = validator.validate(foo.getBar()).isEmpty();
于 2013-01-24T18:51:05.273 に答える