我正在尝试使用自定义验证注释一次应用多个常用注释:
@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);
为了使用自定义验证,我还需要做些什么?
答案 0 :(得分:0)
直接注释String:
@Pattern(regexp = "[a-zA-Z0-9]{1, 25})")
@NotNull
@Length(max=25, min=1, message="invalid length")
public String firstName;
或者创建一个验证器,例如:
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 {};
}
答案 1 :(得分:0)
根据JSR-303
约束定义可能具有在将约束应用于JavaBean时指定的属性。属性将映射为注释元素。注释元素名称消息,组和有效负载被视为保留名称;不允许以有效开头的注释元素;约束可以使用任何其他元素名称作为其属性。
因此,您必须向@MyAnnotation
添加消息,组和有效内容属性
通过注释组合约束来完成合成,例如:
@Length(max=25, min=1, message="invalid length")
@NotNull
@Pattern(regexp = "[a-zA-Z0-9]{1, 25})")
@Documented
@Target({ANNOTATION_TYPE, METHOD, FIELD, CONSTRUCTOR, PARAMETER})
@Retention(RUNTIME)
public @interface MyAnnotation {
String message() default "My annotation message";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}