を使用してリクエスト オブジェクトを検証しようとしていますHibernate Validator
。
簡単な例として、私が検証しようとしているオブジェクトのクラスには、フィールドを持つ別のクラスがあるB bObj
フィールドがあると仮定します。B
String name
そのため、カスタムクラスConstraint Annotations
にリンクされた独自のカスタムを実装しました。MyValidator implements ConstraintValidator
DTO クラス
@AclassValidate(groups = {Operations.Insert.class, Operations.Update.class javax.validation.groups.Default.class})
public class A {
@BclassValidate(groups = {Operations.Insert.class, Operations.Update.class})
private B bObj;
// setters, getters
}
私のエンドポイント メソッド シグネチャ(バリデーターが呼び出され、アクティブなグループが設定されている場所):
@PostMapping("/test")
public A createA(
@Validated(value = Operations.Insert.class)
// @Validated(value = Operations.Update.class)
@RequestBody A a
)
私のバリデータクラス
public class BclassValidator implements ConstraintValidator<BclassValidate, B> {
public void initialize(BclassValidate constraintAnnotation) {
}
public boolean isValid(B b, ConstraintValidatorContext constraintContext) {
boolean valid = true;
// Get active group here
activeGroup = ..?
if (activeGroup == Operations.Insert.class) {
// check if b.getName() equals to "John"
}
else if (activeGroup == Operations.Update.class) {
// check if b.getName() equals to "Doe"
}
return valid;
}
}
私が達成したいのは、アクティブなグループに基づいて同じフィールドに異なる検証を適用することです。アクティブなグループは、@Validated
注釈で設定されたグループです。問題は、その値に基づいてさまざまな検証を適用するために、アクティブなグループを取得するにはどうすればよいかということです。