JSR303 資料校驗 和 順序校驗

2021-10-05 07:49:58 字數 3788 閱讀 7111

jsr303 資料校驗 和 順序校驗

涉及到兩種註解:

jsr303 中的註解如@notempty/@pattern/@length

宣告使用校驗的註解。@validated@valid,乙個在順序校驗的時候用,乙個在普通校驗的時候用。

除了springmvc還需要引入jar

org.hibernate.validator<

/groupid>

hibernate-validator<

/artifactid>

<

/dependency>

資料校驗

使用:

在實體類的字段上新增相應的校驗註解

如:

/**

* 使用者名稱

*/@notempty

(message =

"使用者名稱不可為空!"

)@pattern

(regexp =

"^[a-za-z][a-za-z0-9]$"

, message =

"使用者名稱由字母開頭的6-18位數字和字母組成!"

)private string username;

/** * 手機號

*/@notempty

(message =

"手機號不可為空!"

)@pattern

(regexp =

"^1[3|4|5|6|8|7|9]\\d$"

, message =

"手機號格式不正確!"

)private string phone;

上面簡單定義了使用者名稱和手機號的非空判斷和格式判斷。

使用springmvc接收引數的時候,使用@valid註解,並且後面緊跟乙個bindingresult型別的引數,用於獲取資料校驗的結果。

如:

/**

* 註冊介面

bingresulthaserrors方法會返回乙個boolean判斷資料校驗是否出了問題,如果出了問題,則自定義通過getallerrors方法判斷具體的錯誤是什麼。

如果在引數中不寫bindingresult,在資料校驗出了問題時候,異常會直接被丟擲無法進入方法,而不是說被接受到。

如果同時出現多種引數不一致,如果使用者名稱不符合,手機號也不符合,則獲得到的校驗返回結果並不會固定。有可能這次提示使用者名稱不符合規範,下次就提示手機號不符合規範。因為預設下這個校驗是無任何順序的。

順序校驗

這邊涉及到分組校驗的概念,先定義組的順序,然後將校驗邏輯進行分組。

定義分組類

如:

@groupsequence

(value=

)/**

* 校驗順序

*/public

inte***ce

validatesequence

inte***ce

validate2

inte***ce

validate3

inte***ce

validate4

inte***ce

default

}

我這裡只定義了4個組和乙個最後校驗的預設組。按照註解中的宣告順序,被分到validate1組中的校驗將被最先執行,而相應的validate2和validate3組中的校驗會依次後面執行。

將檢驗邏輯進行分組

繼續以上面的為例

/**

* 使用者名稱

*/@notempty

(message =

"使用者名稱不可為空!"

, groups =

)@pattern

(regexp =

"^[a-za-z][a-za-z0-9]$"

, message =

"使用者名稱由字母開頭的6-18位數字和字母組成!"

, groups =

)private string username;

/** * 手機號

*/@notempty

(message =

"手機號不可為空!"

, groups =

)@pattern

(regexp =

"^1[3|4|5|6|8|7|9]\\d$"

, message =

"手機號格式不正確!"

, groups =

)private string phone;

這裡用上了上面定義的validate1 - 4。最終會按照定義的順序乙個乙個執行過去。

介面那咋寫呢

/**

* 註冊介面

有一點不同,現在這樣寫~

自定義校驗註解

如:

定義乙個註解用於判斷資料是不是清單

@documented

//作用於字段和方法

@target()

@retention

(retentionpolicy.runtime)

//必須宣告校驗的實現類

@constraint

(validatedby = isaccountvalidator.

class

)public @inte***ce

isaccount

; class<

?extends

payload

>

payload()

default

;}

定義校驗類,需要實現constraintvalidator介面,a表示註解型別,t表示修飾的字段型別。

public

class

isaccountvalidator

implements

constraintvalidator

/*** 判斷是否通過校驗

* @param value

* @param context

* @return

*/@override

public

boolean

isvalid

(string value, constraintvalidatorcontext context)

}

筆記 JSR303 表單校驗

要在應用校驗,需要 1.宣告校驗規則 data public class taco data public class order 2.在表單繫結的時候執行校驗 新增了 valid註解對taco物件進行校驗和errors屬性判斷是否出錯。public string processdesign val...

JSR303後端校驗(一)

jsr303後端校驗 一 1 在pom檔案中新增依賴 dependency groupid org.hibernate groupid artifactid hibernate validator artifactid version 6.0.16.final version dependency ...

多環境切換 JSR303資料校驗

springboot中 validated註解用於校驗資料 舉個例子 component 註冊bean configurationproperties prefix person validated 資料校驗 public class person 這時執行會出錯誤 常見的校驗還有 notnull ...