【发布时间】:2012-04-13 09:26:36
【问题描述】:
在编写自定义约束时,可以通过一个验证器实现来验证多个注释。例如,我有几个注释,它们规定了不同的 @size 注释,但我希望它们都指向同一个验证器类,该验证器类进行一些全局检查,即所有都必须匹配某个正则表达式。据我所知,该实现采用一种注释类型。
一个注释
@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;
}
【问题讨论】:
-
决定这无论如何都不是最好的方法。对于通用验证功能,我可以编写一个所有验证器都使用的通用方法。
标签: java bean-validation