[英]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.