[英]Dropwizard custom validation annotation not working
我正在嘗試使用這樣的自定義驗證注釋同時應用多個常用注釋:
@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);
為了使用自定義驗證,我還需要做些什么?
直接注釋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 {};
}
根據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 {};
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.