簡體   English   中英

Dropwizard自定義驗證注釋無法正常工作

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM