簡體   English   中英

Java驗證:多種類型的類型級別注釋

[英]Java validation: type level annotation for multiple types

我想編寫一個適用於多種類型的自定義驗證注釋。 我知道可以使用泛型,但我不能使用泛型,因為我需要對傳遞給驗證器類的類型調用一個方法。

所以我想擁有

@MyAnnotation
public class RequestA{
 private MyObject myObject;
 private String value;
}

和另一個具有相同注釋的類

@MyAnnotation
public class RequestB{
 private MyObject myObject;
 private String value;
}
@Documented
@Constraint(validatedBy = MyAnnotationValidator.class)
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidHoursRequested {
    String message() default "The value is null or missing";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

並且驗證器需要看起來像這樣

public class RequestedHoursValidator implements ConstraintValidator<MyAnnotation, ???> {

    public void initialize(MyAnnotation constraint) {
    }

    @Override
    public boolean isValid(??? request, ConstraintValidatorContext context) {
        if (request.getMyObject().checkWahtever()) {
            return request.getValue() != null;
        }
        return true;
    }
}

問題是??? ,有沒有辦法將動態的東西傳遞給驗證器。 我可以通過實施市場接口來做到這一點,但我正在尋找更多內置框架或正確的方法。

謝謝

您不能定義泛型類,因此您需要使用 Object 而不是那個,因此我假設您使用ParentClass檢查類。 像這樣:

public class ParentClass {
   abstract boolean checkWahtever();
   abstract Object getValue();
}

public class RequestedHoursValidator implements ConstraintValidator<MyAnnotation, Object > {

    public void initialize(MyAnnotation constraint) {
    }

    @Override
    public boolean isValid(Object request, ConstraintValidatorContext context) {
        if (request instanceof ParentClass) {
            ParentClass parent =request;
            if (parent.checkWahtever()) {
               return parent.getValue() != null;
            }
            return true;
        }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM