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