https://github.com/wheel-orga...
hibernate-validator是Hibernate項目中的一個數據校驗框架,是Bean Validation 的參考實現,hibernate-validator除了提供了JSR 303規範中全部內置constraint 的實現,還有一些附加的constraint。
使用hibernate-validator可以將數據校驗從業務代碼中脫離出來,增長代碼可讀性,同時也讓數據校驗變得更加方便、簡單。java
官網地址:http://hibernate.org/validator/git
項目中已經引入了須要的api,無需重複引入
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.16.Final</version> </dependency>
在要校驗的POJO上加上如下註解便可github
註解 | 用途 |
---|---|
Valid | 遞歸的對關聯的對象進行校驗 |
AssertFalse | 用於boolean字段,該字段的值只能爲false |
AssertTrue | 用於boolean字段,該字段只能爲true |
DecimalMax(value) | 被註釋的元素必須是一個數字,只能大於或等於該值 |
DecimalMin(value) | 被註釋的元素必須是一個數字,只能小於或等於該值 |
Digits(integer,fraction) | 檢查是不是一種數字的(整數,小數)的位數 |
Future | 檢查該字段的日期是不是屬於未來的日期 |
FutureOrPresent | 判斷日期是不是未來或如今日期 |
Past | 檢查該字段的日期是在過去 |
PastOrPresent | 判斷日期是不是過去或如今日期 |
Max(value) | 該字段的值只能小於或等於該值 |
Min(value) | 該字段的值只能大於或等於該值 |
Negative | 判斷負數 |
NegativeOrZero | 判斷負數或0 |
Positive | 判斷正數 |
PositiveOrZero | 判斷正數或0 |
NotNull | 不能爲null |
Null | 必須爲 null |
Pattern(value) | 被註釋的元素必須符合指定的正則表達式 |
Size(max, min) | 檢查該字段的size是否在min和max之間,能夠是字符串、數組、集合、Map等 |
Length(max, min) | 判斷字符串長度 |
CreditCardNumber | 被註釋的字符串必須經過Luhn校驗算法,銀行卡,信用卡等號碼通常都用Luhn計算合法性 |
被註釋的元素必須是電子郵箱地址 | |
Length(min=, max=) | 被註釋的字符串的大小必須在指定的範圍內 |
NotBlank | 只能用於字符串不爲null,而且字符串trim()之後length要大於0 |
NotEmpty | 集合對象的元素不爲0,即集合不爲空,也能夠用於字符串不爲null |
Range(min=, max=) | 被註釋的元素必須在合適的範圍內 |
SafeHtml | classpath中要有jsoup包 |
ScriptAssert | 要有Java Scripting API 即JSR 223("Scripting for the JavaTMPlatform")的實現 |
URL(protocol=,host=,port=,regexp=,flags=) | 被註釋的字符串必須是一個有效的url |
更多功能,如:自定義校驗規則、分組校驗、關聯參數聯合校驗請查看官網或百度正則表達式
無需util,Dubbo接口配置上的validation爲true便可算法
在客戶端驗證參數express
<dubbo:reference id="xxxService" interface="xxx.ValidationService" validation="true" />
在服務器端驗證參數api
<dubbo:service interface="xxx.ValidationService" ref="xxxService" validation="true" />
//obj爲包含Hibernate Validator註解的POJO //快速失敗模式 ValidResult validResult = ValidationUtil.fastFailValidate(obj);
//obj爲包含Hibernate Validator註解的POJO //所有校驗模式 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數組
結果如圖:
服務器
HV000183: Unable to initialize 'javax.el.ExpressionFactory'. Check that you have the EL dependencies on the classpath, or use ParameterMessageInterpolator instead
緣由:沒有引入javax.el或者javax.el版本衝突框架
解決:
沒有引入的話引入
<dependency> <groupId>org.glassfish</groupId> <artifactId>javax.el</artifactId> <version>3.0.1-b09</version> </dependency>
若是版本衝突的話先嚐試去除依賴,或者換個低版本的hibernate-validator
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>4.2.0.Final</version> </dependency>