編寫自定義約束時,可以通過一個驗證器實現驗證多個批註。例如,我有幾個註釋,它們規定了不同的@size註釋,但是我希望它們都指向相同的驗證器類,它執行一些全局檢查,即所有驗證器都必須匹配某個正則表達式。據我所見,該實現需要一個註釋類型。JSR-303 Bean驗證 - 自定義約束對一個驗證器的多個批註
一個註釋
@Target({ METHOD, FIELD, ANNOTATION_TYPE, TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {UCNValidator.class})
@Documented
@Size(min = 9, max = 9, message = "{exactlength}")
public @interface UCN {
String message() default "{invalidFormat}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String fieldName() default "ucn";
}
驗證器
public class UCNValidator implements ConstraintValidator<UCN, String>
{
private String pattern = "[a-zA-Z].*";
private String fieldName;
@Override
public void initialize(UCN constraintAnnotation)
{
this.fieldName = constraintAnnotation.fieldName();
}
@Override
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext)
{
if (value != null)
{
if (!value.matches(pattern))
{
//do some stuff
return false;
}
}
return true;
}
決定這不是在任何情況下最好的前進方向。對於常見的驗證功能,我可以只寫一個所有驗證器使用的常用方法。 – andyfinch 2012-04-27 13:17:59