我尝试使用自定义验证注释一次应用多个常见注释,如下所示:
@Retention(RetentionPolicy.RUNTIME)
@Length(max=25, min=1, message="invalid length")
@NotNull
@Pattern(regexp = "[a-zA-Z0-9]{1, 25})")
public @interface MyAnnotation {
}
并在我的模型类中使用它,如下所示:
@MyAnnotation
public String firstName;
这些验证都不起作用,但在模型类本身中使用时它们会按预期工作。我还尝试在应用程序运行方法中注册 MyAnnotation,但这也不起作用。
environment.jersey().register(MyAnnotation.class);
为了使用自定义验证,我还需要做什么?
最佳答案
直接注释字符串:
@Pattern(regexp = "[a-zA-Z0-9]{1, 25})")
@NotNull
@Length(max=25, min=1, message="invalid length")
public String firstName;
或者创建一个 validator ,例如:
class MyAnnotatationValidator implements ConstraintValidator<MyAnnotation, String>{
@Override
public void initialize(MyAnnotation a){}
@Override
public boolean isValid(String s, ConstraintValidationContext c) {
return s != null && (s.length() > 0 && s.length() < 26) && s.matches("[a-zA-Z0-9]{1, 25})";
}
}
并且有
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy=MyAnnotatationValidator.class)
public @interface MyAnnotation {
String message() default = "{MyAnnotation}";
Class<?>[] groups() default {};
Class<? extends Payload> payload() deafult {};
}
关于java - Dropwizard 自定义验证注释不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38153880/