2

を使用してリクエスト オブジェクトを検証しようとしていますHibernate Validator

簡単な例として、私が検証しようとしているオブジェクトのクラスには、フィールドを持つ別のクラスがあるB bObjフィールドがあると仮定します。BString 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注釈で設定されたグループです。問題は、その値に基づいてさまざまな検証を適用するために、アクティブなグループを取得するにはどうすればよいかということです。

4

3 に答える 3