This repository has been archived by the owner on Jan 9, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 28
YMP框架验证模块使用详解
suninformation edited this page Jul 25, 2013
·
1 revision
验证规则声明采用Annotation注解方式,支持方法和实体类成员的验证规则声明,实例代码如下:
-
方法参数声明:
@Validation(fullMode=true) public void setUserName( @Validate({ @ValidateRule(RequriedValidator.NAME), @ValidateRule(value = LengthValidator.NAME, params = { "min=6", "max=16" }) }) String username) throws Exception { // TODO }
-
类成员声明:
@Validation public static class ValidationDemo { @Validate({ @ValidateRule(RequriedValidator.NAME), @ValidateRule(value = LengthValidator.NAME, params = { "min=6", "max=16" }) }) private String userName; public String getUserName() { return userName; } public void setUserName(String userName) throws Exception { this.userName = userName; } }
上述代码中,@Validation注解用于设置验证模式,参数fullMode的默认值为false,若fullMode=true则对目标验证对象内属性进行全部验证,否则直到出现第一个验证未通过就返回验证结果;
每个方法参数或类成员可以通过@Validate注解设置多个验证器,按验证器的先后顺序执行,@Validate注解有三个参数:
- value:验证规则(@ValidateRule)配置集合;
- name:自定义字段参数名称,若为空则默认采用参数变量名或成员属性名称;
- isModel:目标对象是否为JavaBean对象;
验证器由@ValidateRule注解进行声明,它有三个参数:
- value:验证器名称;
- params:验证器参数集合;
- message:错误提示信息模板;
-
执行方法参数验证:
// 获取类方法对象.... Method _setMethod = ......; // 提取方法参数验证规则 PairObject<Validation, Map<String, ValidateRule[]>> _rules = Validates.loadValidateRule(_setMethod, new String[] { "userName" }); // 执行 Set<ValidateResult> _results = Validates.execute(_rules.getKey(), _rules.getValue(), new String[] { "suninformation" });
-
提取类成员验证规则:
// 获取类方法对象.... ValidationDemo _targetObj = new ValidationDemo(); // 提取方法参数验证规则 PairObject<Validation, Map<String, ValidateRule[]>> _rules = Validates.loadValidateRule(_targetObj, new String[] { "userName" }); // 执行 Set<ValidateResult> _results = Validates.execute(_rules.getKey(), _rules.getValue(), new String[] { "suninformation" });
目前模块提供以下验证器:
- RequriedValidator:非空参数验证器;
- RegexValidator:正则表达式验证器;
- EmailValidator:有效电子邮件验证器;
- LengthValidator:字符串长度验证;
- DateValidator:日期类型参数验证;
- NumericValidator:数值类型参数验证;
- CompareValidator:参数值比较验证;
-
STEP 1:通过实现IValidator接口或继承AbstractValidator类实现自定义验证器,代码如下:
-
基于AbstractValidator抽象类实现:
public class TestValidator extends AbstractValidator { public static final String NAME = "test"; public String getName() { return NAME; } protected String onValidate(IValidateContext context) { // ......普通参数对象验证处理过程,返回null表示验证通过,否则返回具体错误信息 return null; } protected String onValidateArray(IValidateContext context, Class<?> arrayClassType) { // ......数组类型参数对象验证处理过程,返回null表示验证通过,否则返回具体错误信息 return null; } }
AbstractValidator抽象类集成了I18N,可加载国际化资源做为返回值,同时将普通参数类型与数组类型的验证方法抽象出来,由子类实现;
-
基于IValidator接口实现:
public class TestValidator implements IValidator { public static final String NAME = "test"; // 这个方法返回的名称是用于验证器注册 public String getName() { return NAME; } // 参数对象验证处理过程 public String validate(IValidateContext context) { return null; } }
每个验证器实现类都提供了一个常量NAME,只是为了方便引用,因为验证规则设置是通过名称来指定验证器的;
-
-
STEP 2:注册自定义验证器,代码如下:
Validates.registerValidatorClass(TestValidator.class);
使用方法:
@Validate({ @ValidateRule(TestValidator.NAME) })