Java 验证:多种类型的类型级别注释
Java validation: type level annotation for multiple types
我想编写一个适用于多种类型的自定义验证注释。我知道可以使用泛型,但我不能使用泛型,因为我需要在传递给验证器 class 的类型上调用一个方法。
所以我想要
@MyAnnotation
public class RequestA{
private MyObject myObject;
private String value;
}
和另一个具有相同注释的 class
@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;
}
}
问题是 ???
,有没有办法将一些动态的东西传递给验证器。我可以通过实施市场界面来做到这一点,但我正在寻找更多内置框架或 proper 的方法。
谢谢
你不能定义泛型 class 所以你需要使用 Object 而不是那个
因此,我假设您使用 ParentClass
检查 classes。像这样:
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;
}
}
我想编写一个适用于多种类型的自定义验证注释。我知道可以使用泛型,但我不能使用泛型,因为我需要在传递给验证器 class 的类型上调用一个方法。
所以我想要
@MyAnnotation
public class RequestA{
private MyObject myObject;
private String value;
}
和另一个具有相同注释的 class
@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;
}
}
问题是 ???
,有没有办法将一些动态的东西传递给验证器。我可以通过实施市场界面来做到这一点,但我正在寻找更多内置框架或 proper 的方法。
谢谢
你不能定义泛型 class 所以你需要使用 Object 而不是那个
因此,我假设您使用 ParentClass
检查 classes。像这样:
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;
}
}