对oval验证框架进行分类,并针对常用的验证规则进行总结,从而可以抽象成模型可以定义,达到定义后自动生成,减少开发人员的工作量,同时也规范化代码结构。
验证根据验证对象的类型可以分为字符串验证、数值验证、日期验证、自定义验证,其中自定义验证可以是关联验证或逻辑验证。一般@NotNull规则是所有类型都有可能用到,即不许为空,后面每个类型不再说明,一般和数据库约束保持一致;
字符串一般验证包括不能为空格(@NotBlank)、长度验证(@Length)以及内容验证。其中内容验证包括@Email、@Url、@HasSubstring以及自定义验证。一般@NotNull、@NotBlank、@Length必须且一起使用。
自定义内容验证可以是@Assert、@MatchPatternCheck、@CheckWith以及@ValidateWithMethod;@Assert使用groovy表达式做字段关联验证、@MatchPatternCheck正则表达式验证、@ValidateWithMethod、@CheckWith是实现业务逻辑验证。
规范中数据库中使用number类型,一般集合使用@Length长度验证。
@Range验证范围有最大值和最小值属性,默认最小值为0,@Range属于内容验证,Range属性有最大值和最小值,可以使用默认值。@NotNegative表示值为非负数,属于内容验证。
@Length长度应该是number类型的长度加上精度,如果精度大于0,则再加上一位小数点。
自定义验证同上,单数值没有正在表达式验证。
日期在开发规范中采用字符串,且长度只有10和19两类,如果需要显示年或年月,建议采用下拉列表框,截取需要显示的部分。控件采用只读模式,则无需长度验证。
@DateRange、@CFuture、@CPast属于内容验证。
自定义验证同上,单数值没有正在表达式验证。
每个字段有多个验证规则;每个规则都有三个常用属性:错误代码、错误消息、前置条件,每个规则有若干个参数。总结如下表格所示:
模型抽象:验证规则的抽象包括规则名称,规则参数,多个参数使用逗号分隔;为了简化,只能添加和删除,不能修改;生成对应的实际注解描述,方便排查错误。
参数个数 |
参数说明 |
备注 |
无参 |
@NotNull、@NotBlank、@Url、@Email @NotNegative @CFuture、@CPast |
|
两个参数 |
@Length、@Range、@DateRange
|
max、min
|
@HasSubstring |
value ignoreCase(boolean) |
|
自定义 |
@Assert有一个expr参数 |
|
@CheckWith有个value |
|
|
@ValidateWithMethod有methodName参数和参数类型的class,即字段的class |
|
|
@MatchPatternCheck有一个pattern参数 |
|
待续,已经有良好思路的请指正。