JSR-303 Bean验证 - 自定义约束对一个验证器的多个注释

问题描述 投票:1回答:1

编写自定义约束时,可以通过一个验证器实现验证多个注释。例如,我有几个注释规定了不同的@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
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.