對(duì)oval驗(yàn)證框架進(jìn)行分類,并針對(duì)常用的驗(yàn)證規(guī)則進(jìn)行總結(jié),從而可以抽象成模型可以定義,達(dá)到定義后自動(dòng)生成,減少開發(fā)人員的工作量,同時(shí)也規(guī)范化代碼結(jié)構(gòu)。
驗(yàn)證根據(jù)驗(yàn)證對(duì)象的類型可以分為字符串驗(yàn)證、數(shù)值驗(yàn)證、日期驗(yàn)證、自定義驗(yàn)證,其中自定義驗(yàn)證可以是關(guān)聯(lián)驗(yàn)證或邏輯驗(yàn)證。一般@NotNull規(guī)則是所有類型都有可能用到,即不許為空,后面每個(gè)類型不再說明,一般和數(shù)據(jù)庫約束保持一致;
字符串一般驗(yàn)證包括不能為空格(@NotBlank)、長度驗(yàn)證(@Length)以及內(nèi)容驗(yàn)證。其中內(nèi)容驗(yàn)證包括@Email、@Url、@HasSubstring以及自定義驗(yàn)證。一般@NotNull、@NotBlank、@Length必須且一起使用。
自定義內(nèi)容驗(yàn)證可以是@Assert、@MatchPatternCheck、@CheckWith以及@ValidateWithMethod;@Assert使用groovy表達(dá)式做字段關(guān)聯(lián)驗(yàn)證、@MatchPatternCheck正則表達(dá)式驗(yàn)證、@ValidateWithMethod、@CheckWith是實(shí)現(xiàn)業(yè)務(wù)邏輯驗(yàn)證。
規(guī)范中數(shù)據(jù)庫中使用number類型,一般集合使用@Length長度驗(yàn)證。
@Range驗(yàn)證范圍有最大值和最小值屬性,默認(rèn)最小值為0,@Range屬于內(nèi)容驗(yàn)證,Range屬性有最大值和最小值,可以使用默認(rèn)值。@NotNegative表示值為非負(fù)數(shù),屬于內(nèi)容驗(yàn)證。
@Length長度應(yīng)該是number類型的長度加上精度,如果精度大于0,則再加上一位小數(shù)點(diǎn)。
自定義驗(yàn)證同上,單數(shù)值沒有正在表達(dá)式驗(yàn)證。
日期在開發(fā)規(guī)范中采用字符串,且長度只有10和19兩類,如果需要顯示年或年月,建議采用下拉列表框,截取需要顯示的部分??丶捎弥蛔x模式,則無需長度驗(yàn)證。
@DateRange、@CFuture、@CPast屬于內(nèi)容驗(yàn)證。
自定義驗(yàn)證同上,單數(shù)值沒有正在表達(dá)式驗(yàn)證。
每個(gè)字段有多個(gè)驗(yàn)證規(guī)則;每個(gè)規(guī)則都有三個(gè)常用屬性:錯(cuò)誤代碼、錯(cuò)誤消息、前置條件,每個(gè)規(guī)則有若干個(gè)參數(shù)??偨Y(jié)如下表格所示:
模型抽象:驗(yàn)證規(guī)則的抽象包括規(guī)則名稱,規(guī)則參數(shù),多個(gè)參數(shù)使用逗號(hào)分隔;為了簡化,只能添加和刪除,不能修改;生成對(duì)應(yīng)的實(shí)際注解描述,方便排查錯(cuò)誤。
參數(shù)個(gè)數(shù) | 參數(shù)說明 | 備注 |
無參 | @NotNull、@NotBlank、@Url、@Email @NotNegative @CFuture、@CPast |
|
兩個(gè)參數(shù) | @Length、@Range、@DateRange
| max、min
|
@HasSubstring | value ignoreCase(boolean) | |
自定義 | @Assert有一個(gè)expr參數(shù) |
|
@CheckWith有個(gè)value |
| |
@ValidateWithMethod有methodName參數(shù)和參數(shù)類型的class,即字段的class |
| |
@MatchPatternCheck有一個(gè)pattern參數(shù) |
|
待續(xù),已經(jīng)有良好思路的請(qǐng)指正。
聯(lián)系客服