Hibernate Validator實現(xiàn)更簡潔的參數(shù)校驗及一個util
代碼地址
https://github.com/wheel-organization/wheel
簡介
hibernate-validator是Hibernate項目中的一個數(shù)據(jù)校驗框架,是Bean Validation 的參考實現(xiàn),hibernate-validator除了提供了JSR 303規(guī)范中所有內(nèi)置constraint 的實現(xiàn),還有一些附加的constraint。
使用hibernate-validator能夠?qū)?shù)據(jù)校驗從業(yè)務(wù)代碼中脫離出來,增加代碼可讀性,同時也讓數(shù)據(jù)校驗變得更加方便、簡單。
官網(wǎng)地址:http://hibernate.org/validator/
如何使用
項目中已經(jīng)引入了需要的api,無需重復(fù)引入
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.16.Final</version> </dependency>
在要校驗的POJO上加上以下注解即可
注解 | 用途 |
---|---|
Valid | 遞歸的對關(guān)聯(lián)的對象進行校驗 |
AssertFalse | 用于boolean字段,該字段的值只能為false |
AssertTrue | 用于boolean字段,該字段只能為true |
DecimalMax(value) | 被注釋的元素必須是一個數(shù)字,只能大于或等于該值 |
DecimalMin(value) | 被注釋的元素必須是一個數(shù)字,只能小于或等于該值 |
Digits(integer,fraction) | 檢查是否是一種數(shù)字的(整數(shù),小數(shù))的位數(shù) |
Future | 檢查該字段的日期是否是屬于將來的日期 |
FutureOrPresent | 判斷日期是否是將來或現(xiàn)在日期 |
Past | 檢查該字段的日期是在過去 |
PastOrPresent | 判斷日期是否是過去或現(xiàn)在日期 |
Max(value) | 該字段的值只能小于或等于該值 |
Min(value) | 該字段的值只能大于或等于該值 |
Negative | 判斷負(fù)數(shù) |
NegativeOrZero | 判斷負(fù)數(shù)或0 |
Positive | 判斷正數(shù) |
PositiveOrZero | 判斷正數(shù)或0 |
NotNull | 不能為null |
Null | 必須為 null |
Pattern(value) | 被注釋的元素必須符合指定的正則表達式 |
Size(max, min) | 檢查該字段的size是否在min和max之間,可以是字符串、數(shù)組、集合、Map等 |
Length(max, min) | 判斷字符串長度 |
CreditCardNumber | 被注釋的字符串必須通過Luhn校驗算法,銀行卡,信用卡等號碼一般都用Luhn計算合法性 |
被注釋的元素必須是電子郵箱地址 | |
Length(min=, max=) | 被注釋的字符串的大小必須在指定的范圍內(nèi) |
NotBlank | 只能用于字符串不為null,并且字符串trim()以后length要大于0 |
NotEmpty | 集合對象的元素不為0,即集合不為空,也可以用于字符串不為null |
Range(min=, max=) | 被注釋的元素必須在合適的范圍內(nèi) |
SafeHtml | classpath中要有jsoup包 |
ScriptAssert | 要有Java Scripting API 即JSR 223("Scripting for the JavaTMPlatform")的實現(xiàn) |
URL(protocol=,host=,port=,regexp=,flags=) | 被注釋的字符串必須是一個有效的url |
更多功能,如:自定義校驗規(guī)則、分組校驗、關(guān)聯(lián)參數(shù)聯(lián)合校驗請查看官網(wǎng)或百度
Dubbo中使用Hibernate Validator校驗入?yún)?/strong>
無需util,Dubbo接口配置上的validation為true即可
在客戶端驗證參數(shù)
<dubbo:reference id="xxxService" interface="xxx.ValidationService" validation="true" />
在服務(wù)器端驗證參數(shù)
<dubbo:service interface="xxx.ValidationService" ref="xxxService" validation="true" />
在代碼里校驗入?yún)?br />
//obj為包含Hibernate Validator注解的POJO //快速失敗模式 ValidResult validResult = ValidationUtil.fastFailValidate(obj); //obj為包含Hibernate Validator注解的POJO //全部校驗?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 List<String> testSize; @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; }
單測:ValidationUtilTest
性能測試
結(jié)果如圖:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java多線程run方法中直接調(diào)用service業(yè)務(wù)類應(yīng)注意的問題及解決
這篇文章主要介紹了Java多線程run方法中直接調(diào)用service業(yè)務(wù)類應(yīng)注意的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06java實現(xiàn)遍歷樹形菜單兩種實現(xiàn)代碼分享
這篇文章主要介紹了java實現(xiàn)遍歷樹形菜單兩種實現(xiàn)代碼分享,兩種實現(xiàn):OpenSessionView實現(xiàn)、TreeAction實現(xiàn)。具有一定參考價值,需要的朋友可以了解下。2017-11-11詳解SpringBoot結(jié)合策略模式實戰(zhàn)套路
這篇文章主要介紹了詳解SpringBoot結(jié)合策略模式實戰(zhàn)套路,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10Java利用ITextPdf庫生成PDF預(yù)覽文件的具體實現(xiàn)
這篇文章主要給大家介紹了Java利用ITextPdf庫生成PDF預(yù)覽文件的具體實現(xiàn),文中通過代碼示例和圖文給大家介紹的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下2024-04-04IDEA中springboot提示java:找不到符號符號:變量log問題
這篇文章主要介紹了IDEA中springboot提示java:找不到符號符號:變量log問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04mybatis-plus批量更新updateBatchById問題
這篇文章主要介紹了mybatis-plus批量更新updateBatchById問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07Java Vector和ArrayList的異同分析及實例講解
在本篇文章里小編給大家整理的是一篇關(guān)于Java Vector和ArrayList的異同分析及實例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。2021-01-01