摘要:代碼地址簡(jiǎn)介是項(xiàng)目中的一個(gè)數(shù)據(jù)校驗(yàn)框架,是的參考實(shí)現(xiàn),除了提供了規(guī)范中所有內(nèi)置的實(shí)現(xiàn),還有一些附加的。使用能夠?qū)?shù)據(jù)校驗(yàn)從業(yè)務(wù)代碼中脫離出來(lái),增加代碼可讀性,同時(shí)也讓數(shù)據(jù)校驗(yàn)變得更加方便簡(jiǎn)單。
代碼地址
https://github.com/wheel-orga...簡(jiǎn)介
hibernate-validator是Hibernate項(xiàng)目中的一個(gè)數(shù)據(jù)校驗(yàn)框架,是Bean Validation 的參考實(shí)現(xiàn),hibernate-validator除了提供了JSR 303規(guī)范中所有內(nèi)置constraint 的實(shí)現(xiàn),還有一些附加的constraint。
使用hibernate-validator能夠?qū)?shù)據(jù)校驗(yàn)從業(yè)務(wù)代碼中脫離出來(lái),增加代碼可讀性,同時(shí)也讓數(shù)據(jù)校驗(yàn)變得更加方便、簡(jiǎn)單。
官網(wǎng)地址:http://hibernate.org/validator/
如何使用項(xiàng)目中已經(jīng)引入了需要的api,無(wú)需重復(fù)引入
org.hibernate hibernate-validator 6.0.16.Final
在要校驗(yàn)的POJO上加上以下注解即可
注解 | 用途 |
---|---|
Valid | 遞歸的對(duì)關(guān)聯(lián)的對(duì)象進(jìn)行校驗(yàn) |
AssertFalse | 用于boolean字段,該字段的值只能為false |
AssertTrue | 用于boolean字段,該字段只能為true |
DecimalMax(value) | 被注釋的元素必須是一個(gè)數(shù)字,只能大于或等于該值 |
DecimalMin(value) | 被注釋的元素必須是一個(gè)數(shù)字,只能小于或等于該值 |
Digits(integer,fraction) | 檢查是否是一種數(shù)字的(整數(shù),小數(shù))的位數(shù) |
Future | 檢查該字段的日期是否是屬于將來(lái)的日期 |
FutureOrPresent | 判斷日期是否是將來(lái)或現(xiàn)在日期 |
Past | 檢查該字段的日期是在過(guò)去 |
PastOrPresent | 判斷日期是否是過(guò)去或現(xiàn)在日期 |
Max(value) | 該字段的值只能小于或等于該值 |
Min(value) | 該字段的值只能大于或等于該值 |
Negative | 判斷負(fù)數(shù) |
NegativeOrZero | 判斷負(fù)數(shù)或0 |
Positive | 判斷正數(shù) |
PositiveOrZero | 判斷正數(shù)或0 |
NotNull | 不能為null |
Null | 必須為 null |
Pattern(value) | 被注釋的元素必須符合指定的正則表達(dá)式 |
Size(max, min) | 檢查該字段的size是否在min和max之間,可以是字符串、數(shù)組、集合、Map等 |
Length(max, min) | 判斷字符串長(zhǎng)度 |
CreditCardNumber | 被注釋的字符串必須通過(guò)Luhn校驗(yàn)算法,銀行卡,信用卡等號(hào)碼一般都用Luhn計(jì)算合法性 |
被注釋的元素必須是電子郵箱地址 | |
Length(min=, max=) | 被注釋的字符串的大小必須在指定的范圍內(nèi) |
NotBlank | 只能用于字符串不為null,并且字符串trim()以后length要大于0 |
NotEmpty | 集合對(duì)象的元素不為0,即集合不為空,也可以用于字符串不為null |
Range(min=, max=) | 被注釋的元素必須在合適的范圍內(nèi) |
SafeHtml | classpath中要有jsoup包 |
ScriptAssert | 要有Java Scripting API 即JSR 223("Scripting for the JavaTMPlatform")的實(shí)現(xiàn) |
URL(protocol=,host=,port=,regexp=,flags=) | 被注釋的字符串必須是一個(gè)有效的url |
更多功能,如:自定義校驗(yàn)規(guī)則、分組校驗(yàn)、關(guān)聯(lián)參數(shù)聯(lián)合校驗(yàn)請(qǐng)查看官網(wǎng)或百度
Dubbo中使用Hibernate Validator校驗(yàn)入?yún)?/b>無(wú)需util,Dubbo接口配置上的validation為true即可
在客戶端驗(yàn)證參數(shù)
在服務(wù)器端驗(yàn)證參數(shù)
在代碼里校驗(yàn)入?yún)?/b>
//obj為包含Hibernate Validator注解的POJO //快速失敗模式 ValidResult validResult = ValidationUtil.fastFailValidate(obj);
//obj為包含Hibernate Validator注解的POJO //全部校驗(yàn)?zāi)J?ValidResult validResult = ValidationUtil.allCheckValidate(obj);樣例
public class ParamTestDTO implements Serializable { private static final long serialVersionUID = 7123882542534668217L; @AssertTrue(message = "Error True") private Boolean testTrue; @AssertFalse(message = "Error False") private Boolean testFalse; @DecimalMax(value = "10", message = "Error StrMax") private String testStrMax; @DecimalMin(value = "1", message = "Error StrMin") private String testStrMin; @Max(value = 10, message = "Error Max") private Integer testMax; @Min(value = 1, message = "Error Min") private Double testMin; @Digits(integer = 2, fraction = 3, message = "Error Dig") private BigDecimal testDig; @Past(message = "Error Past") private Date testPast; @Future(message = "Error Future") private Date testFuture; @Null(message = "Error Null") private String testNull; @NotNull(message = "Error NonNull") private String testNonNull; @Pattern(regexp = "^[0-9]?[0-9]$", message = "Error Pattern") private String testPattern; @Size(min = 1, max = 10, message = "Error Size") private ListtestSize; @Length(min = 1, max = 10, message = "Error Length") private String testLength; @NotBlank(message = "Error Blank") private String testBlank; @NotEmpty(message = "Error NotEmpty") private String testEmpty; @Range(min = 1, max = 10, message = "Error Range") private String testRange; }
單測(cè):ValidationUtilTest
性能測(cè)試結(jié)果如圖:
HV000183: Unable to initialize "javax.el.ExpressionFactory". Check that you have the EL dependencies on the classpath, or use ParameterMessageInterpolator instead
原因:沒(méi)有引入javax.el或者javax.el版本沖突
解決:
沒(méi)有引入的話引入
org.glassfish javax.el 3.0.1-b09
如果版本沖突的話先嘗試去除依賴,或者換個(gè)低版本的hibernate-validator
org.hibernate hibernate-validator 4.2.0.Final
參考解決
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/77675.html
摘要:前言最近在開(kāi)發(fā)某個(gè)模塊的功能時(shí),里面包含大量對(duì)請(qǐng)求參數(shù)判空和驗(yàn)證的步驟且參數(shù)繁多,存在大量的重復(fù)判斷,驗(yàn)證影響代碼的美觀遂決定優(yōu)化這部分代碼。 前言 最近在開(kāi)發(fā)某個(gè)模塊的功能時(shí),里面包含大量對(duì)請(qǐng)求參數(shù)判空和驗(yàn)證的步驟且參數(shù)繁多,存在大量的重復(fù)判斷,驗(yàn)證影響代碼的美觀遂決定優(yōu)化這部分代碼。SpringBoot自帶了參數(shù)驗(yàn)證框Hibernate Validator,下面是自己的學(xué)習(xí)筆記。 ...
摘要:前言最近在開(kāi)發(fā)某個(gè)模塊的功能時(shí),里面包含大量對(duì)請(qǐng)求參數(shù)判空和驗(yàn)證的步驟且參數(shù)繁多,存在大量的重復(fù)判斷,驗(yàn)證影響代碼的美觀遂決定優(yōu)化這部分代碼。 前言 最近在開(kāi)發(fā)某個(gè)模塊的功能時(shí),里面包含大量對(duì)請(qǐng)求參數(shù)判空和驗(yàn)證的步驟且參數(shù)繁多,存在大量的重復(fù)判斷,驗(yàn)證影響代碼的美觀遂決定優(yōu)化這部分代碼。SpringBoot自帶了參數(shù)驗(yàn)證框Hibernate Validator,下面是自己的學(xué)習(xí)筆記。 ...
摘要:所以就有今天的話題利用注解對(duì)進(jìn)行校驗(yàn)。利用注解對(duì)進(jìn)行校驗(yàn),主要是利用框架,實(shí)現(xiàn)了的接口關(guān)于校驗(yàn)的接口,直接使用非常方便,省時(shí)省力。 最近寫(xiě)業(yè)務(wù)代碼,因?yàn)轫?yè)面復(fù)雜,導(dǎo)致對(duì)應(yīng)的Bean屬性非常多,而產(chǎn)品大佬又提出各種校驗(yàn)要求。 emmmmmm......如果寫(xiě)if條件來(lái)校驗(yàn),那簡(jiǎn)直是又臭又長(zhǎng)。 所以就有今天的話題——利用注解對(duì)Bean進(jìn)行校驗(yàn)。 利用注解對(duì)Bean進(jìn)行校驗(yàn),主要是利用hib...
摘要:在開(kāi)發(fā)服務(wù)器端代碼時(shí),我們會(huì)遇到對(duì)外部傳來(lái)的參數(shù)合法性進(jìn)行驗(yàn)證,而提供了一些常用的參數(shù)校驗(yàn)注解,我們可以拿來(lái)使用。 在開(kāi)發(fā)JAVA服務(wù)器端代碼時(shí),我們會(huì)遇到對(duì)外部傳來(lái)的參數(shù)合法性進(jìn)行驗(yàn)證,而hibernate-validator提供了一些常用的參數(shù)校驗(yàn)注解,我們可以拿來(lái)使用。1.maven中引入hibernate-validator對(duì)應(yīng)的jar: org.hibernate ...
摘要:時(shí)間年月日星期三說(shuō)明使用規(guī)范校驗(yàn)接口請(qǐng)求參數(shù)源碼第一章理論簡(jiǎn)介背景介紹如今互聯(lián)網(wǎng)項(xiàng)目都采用接口形式進(jìn)行開(kāi)發(fā)。該規(guī)范定義了一個(gè)元數(shù)據(jù)模型,默認(rèn)的元數(shù)據(jù)來(lái)源是注解。 時(shí)間:2017年11月08日星期三說(shuō)明:使用JSR303規(guī)范校驗(yàn)http接口請(qǐng)求參數(shù) 源碼:https://github.com/zccodere/s... 第一章:理論簡(jiǎn)介 1-1 背景介紹 如今互聯(lián)網(wǎng)項(xiàng)目都采用HTTP接口...
閱讀 3474·2021-11-25 09:43
閱讀 1081·2021-11-15 11:36
閱讀 3324·2021-11-11 16:54
閱讀 3990·2021-09-27 13:35
閱讀 4381·2021-09-10 11:23
閱讀 5788·2021-09-07 10:22
閱讀 3048·2021-09-04 16:40
閱讀 779·2021-08-03 14:03