私はこれに似たクラスを持っています:
public Foo {
@Valid
private Bar bar;
private Long barId;
}
クラス Foo を検証すると、クラス Bar も検証されます。しかし、Foo を検証するときにクラス Bar を検証したくない場合があります (たとえば、不適切な値を修正できない場合など)。これに似たことができますか:
@Valid(when="barId is null")
?
私はこれに似たクラスを持っています:
public Foo {
@Valid
private Bar bar;
private Long barId;
}
クラス Foo を検証すると、クラス Bar も検証されます。しかし、Foo を検証するときにクラス Bar を検証したくない場合があります (たとえば、不適切な値を修正できない場合など)。これに似たことができますか:
@Valid(when="barId is null")
?
実際には、@Valid の条件はサポートされていません。回避策として、カスタム制約@ConditionalBarValidを定義してみてください。クラスレベルで適用できます:
@ConditionalBarValid
public Foo {
private Bar bar;
private Long barId;
}
したがって、制約バリデーターは Foo オブジェクト全体にアクセスでき、次のことが可能になります。
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();