制約のグループ化とグループの順序を使用して検証順序を定義することができます。 JSR-303(一部3.5検証ルーチン)によれば:グループ配列によって順序付けられていない限り
、グループがない 特定の順序で検証することができます。これは、同一パス内の複数のグループについて、検証ルーチンを で実行できることを意味します。
Hibernateバリdocumentationが言うように:
あなただけ インターフェイスを定義し、@GroupSequenceでそれに注釈を付ける必要があり、このような検証順序を実現するためには、グループが持っているため を定義します検証する(グループの定義 シーケンスを参照)。シーケンスされたグループで少なくとも1つの制約が失敗した場合、シーケンス内の次のグループの制約のうち には が有効になりません。その後、
public interface CheckItFirst {}
public interface ThenCheckIt {}
public class FormModel {
@NotBlank
private String name;
@NotNull(groups = CheckItFirst.class)
@ImageSizeConstraint(groups = ThenCheckIt.class)
private MultipartFile image;
}
そして、制約は関係なく、彼らは(Default
グループに属しているグループの、順不同で評価されているとおり
まず、あなたは制約グループを定義し、制約にそれらを適用する必要があまりにも)、image
フィールド制約グループのために@GroupSequenceを作成する必要があります。
@GroupSequence({ CheckItFirst.class, ThenCheckIt.class })
public interface OrderedChecks {}
あなたはメソッド・レベルの検証のための検証グループを指定することができ、@Validatedアノテーションを使用して、Spring MVCのコントローラの方法でこの検証を適用するには
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<FormModel>> constraintViolations =
validator.validate(formModel, OrderedChecks.class);
でそれをテストすることができます。
@PostMapping(value = "/processFormModel")
public String processFormModel(@Validated(OrderedChecks.class) FormModel formModel) {
<...>
}
カスタム制約の 'NotNull' **をコーディングするとどうでしょうか? –
可能ですが、懸念事項を分けたいと思います。 –