Validateur personnalisé


Comprendre une nouvelle annotation avant d'écrire du code @Validator,它的作用是声明一个类为验证器,它的参数需要绑定自定义验证器对应的注解,这个注解的作用与@VRequriedLes autres annotations sont les mêmes, les développeurs peuvent configurer des règles de validation via cette annotation

Dans ce cas, nous créons un simple validateur personnalisé pour vérifier la saisie actuelle de l'utilisateur si l'adresse e-mail existe déjà ;

  • Créez une annotation de validateur personnalisée :

    @Target({ElementType.FIELD, ElementType.PARAMETER})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface VEmailCanUse {
    
        /**
         * @return 自定义验证消息
         */
        String msg() default "";
    }
  • Implémentez l'interface IValidator et déclarez l'annotation @Validator :

    @Validator(VEmailCanUse.class)
    public class EmailCanUseValidator implements IValidator {
    
        public ValidateResult validate(ValidateContext context) {
            ValidateResult _result = null;
            if (context.getParamValue() != null) {
                // 假定邮箱地址已存在
                VEmailCanUse _anno = (VEmailCanUse) context.getAnnotation();
                _result = new ValidateResult(context.getParamName(), StringUtils.defaultIfBlank(_anno.msg(), "邮箱地址已存在"));
            }
            return _result;
        }
    }
  • Code de test :

    public class VEmailCanUseBean {
    
        @VRequried
        @VEmail
        @VEmailCanUse
        private String email;
    
        //
        // 此处省略了Get/Set方法
        //
    }
    
    public static void main(String[] args) throws Exception {
        YMP.get().init();
        try {
            Map<String, Object> _params = new HashMap<String, Object>();
            _params.put("ext.email", "demo@163.com");
    
            Map<String, ValidateResult> _results = Validations.get().validate(VEmailCanUseBean.class, _params);
            //
            for (Map.Entry<String, ValidateResult> _entry : _results.entrySet()) {
                System.out.println(_entry.getKey() + " : " + _entry.getValue().getMsg());
            }
        } finally {
            YMP.get().destroy();
        }
    }
  • Résultat d'exécution :

    ext.email : 邮箱地址已存在