YMP框架验证模块使用详解
如何声明参数验证规则?
验证规则声明采用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) })
相关文章
- 基于-SLF4J-MDC-机制的日志链路追踪配置属性
ums: # ================ 基于 SLF4J MDC 机制的日志链路追踪配置属性 ================ mdc: # 是否支持基于 SLF4J MDC
- ajax-跨域访问
ajax 跨域访问 <!DOCTYPE html> <html xmlns:th="http://www.w3.org/1999/xhtml"> <head>
- 给第三方登录时用的数据库表-user_connection-与-auth_token-添加-redis-cache
spring: # 设置缓存为 Redis cache: type: redis # redis redis: host: 192.168.88.88 port
- Java动态代理
Jdk动态代理 通过InvocationHandler和Proxy针对实现了接口的类进行动态代理,即必须有相应的接口 应用 public class TestProxy { public
- Java读取classpath中的文件
public void init() { try { //URL url = Thread.currentThread().getContextClassLo
随机推荐
- 基于-SLF4J-MDC-机制的日志链路追踪配置属性
ums: # ================ 基于 SLF4J MDC 机制的日志链路追踪配置属性 ================ mdc: # 是否支持基于 SLF4J MDC
- ajax-跨域访问
ajax 跨域访问 <!DOCTYPE html> <html xmlns:th="http://www.w3.org/1999/xhtml"> <head>
- 给第三方登录时用的数据库表-user_connection-与-auth_token-添加-redis-cache
spring: # 设置缓存为 Redis cache: type: redis # redis redis: host: 192.168.88.88 port
- Java动态代理
Jdk动态代理 通过InvocationHandler和Proxy针对实现了接口的类进行动态代理,即必须有相应的接口 应用 public class TestProxy { public
- Java读取classpath中的文件
public void init() { try { //URL url = Thread.currentThread().getContextClassLo