自定義驗(yàn)證器

2018-12-24 22:39 更新

寫代碼前先了解一個(gè)新的注解@Validator,它的作用是聲明一個(gè)類為驗(yàn)證器,它的參數(shù)需要綁定自定義驗(yàn)證器對(duì)應(yīng)的注解,這個(gè)注解的作用與@VRequried等注解是一樣的,開發(fā)人員可以通過該注解配置驗(yàn)證規(guī)則;

本例中,我們創(chuàng)建一個(gè)簡(jiǎn)單的自定義驗(yàn)證器,用來驗(yàn)證當(dāng)前用戶輸入的郵箱地址是否已存在;

  • 創(chuàng)建自定義驗(yàn)證器注解:

    @Target({ElementType.FIELD, ElementType.PARAMETER})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface VEmailCanUse {
    
        /**
         * @return 自定義驗(yàn)證消息
         */
        String msg() default "";
    }
    
  • 實(shí)現(xiàn)IValidator接口并聲明@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;
        }
    }
    
  • 測(cè)試代碼:

    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();
        }
    }
    
  • 執(zhí)行結(jié)果:

    ext.email : 郵箱地址已存在
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)