カスタムバリデーター
コードを記述する前に新しいアノテーションを理解してください@Validator
,它的作用是声明一个类为验证器,它的参数需要绑定自定义验证器对应的注解,这个注解的作用与@VRequried
他のアノテーションも同様です。開発者はこのアノテーションを通じて検証ルールを設定できます
この場合、現在のユーザー入力を検証するための単純なカスタムバリデーターを作成します
メールアドレスが既に存在するかどうか;- カスタムバリデーターアノテーションを作成します:
@Target({ElementType.FIELD, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface VEmailCanUse { /** * @return 自定义验证消息 */ String msg() default ""; }
- 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; } }
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(); } }
- 実行結果:
ext.email : 邮箱地址已存在