Hibernate Validator 是 Bean Validation 的參考實現(xiàn) 槐瑞。Hibernate Validator 提供了 JSR 303
規(guī)范中所有內(nèi)置 constraint 的實現(xiàn)寥粹,除此之外還有一些附加的 constraint。
在日常開發(fā)中埂材,Hibernate Validator經(jīng)常用來驗證bean的字段赋铝,基于注解箩绍,方便快捷高效呀伙。
Bean Validation 中內(nèi)置的 constraint
注解 | 作用 |
---|---|
@Valid | 被注釋的元素是一個對象你稚,需要檢查此對象的所有字段值 |
@Null | 被注釋的元素必須為 null |
@NotNull | 被注釋的元素必須不為 null |
@AssertTrue | 被注釋的元素必須為 true |
@AssertFalse | 被注釋的元素必須為 false |
@Min(value) | 被注釋的元素必須是一個數(shù)字寇壳,其值必須大于等于指定的最小值 |
@Max(value) | 被注釋的元素必須是一個數(shù)字醒颖,其值必須小于等于指定的最大值 |
@DecimalMin(value) | 被注釋的元素必須是一個數(shù)字,其值必須大于等于指定的最小值 |
@DecimalMax(value) | 被注釋的元素必須是一個數(shù)字壳炎,其值必須小于等于指定的最大值 |
@Size(max, min) | 被注釋的元素的大小必須在指定的范圍內(nèi) |
@Digits (integer, fraction) | 被注釋的元素必須是一個數(shù)字泞歉,其值必須在可接受的范圍內(nèi) |
@Past | 被注釋的元素必須是一個過去的日期 |
@Future | 被注釋的元素必須是一個將來的日期 |
@Pattern(value) | 被注釋的元素必須符合指定的正則表達式 |
Hibernate Validator 附加的 constraint
注解 | 作用 |
---|---|
被注釋的元素必須是電子郵箱地址 | |
@Length(min=, max=) | 被注釋的字符串的大小必須在指定的范圍內(nèi) |
@NotEmpty | 被注釋的字符串的必須非空 |
@Range(min=, max=) | 被注釋的元素必須在合適的范圍內(nèi) |
@NotBlank | 被注釋的字符串的必須非空 |
@URL(protocol=,host=, port=, regexp=, flags=) | 被注釋的字符串必須是一個有效的url |
@CreditCardNumber | 被注釋的字符串必須通過Luhn校驗算法,銀行卡,信用卡等號碼一般都用Luhn計算合法性 |
@ScriptAssert(lang=, script=, alias=) | 要有Java Scripting API 即JSR 223 ("Scripting for the JavaTM Platform")的實現(xiàn) |
@SafeHtml(whitelistType=, additionalTags=) | classpath中要有jsoup包 |
hibernate補充的注解中腰耙,最后3個不常用榛丢,可忽略。
主要區(qū)分下@NotNull
,@NotEmpty
,@NotBlank
3個注解的區(qū)別:
- @NotNull:任何對象的value不能為null
- @NotEmpty:集合對象的元素不為0沟优,即集合不為空涕滋,也可以用于字符串不為null
- @NotBlank:只能用于字符串不為null,并且字符串trim()以后length要大于0
舉個使用的例子:
public class User {
@NotBlank
private String name;
//年齡要大于18歲
@Min(18)
private int age;
@Email
private String email;
//嵌套驗證
@Valid
private Product products;
... //省略getter挠阁,setter
}
public class Product {
@NotBlank
private String name;
//價格在10元-50元之間
@Range(min=10,max=50)
private int price;
... //省略getter宾肺,setter
}