hibernate Validator 是 Bean Validation 的參考實現 。Hibernate Validator 提供了 JSR 303 規範中全部內置 constraint 的實現,除此以外還有一些附加的 constraint。java
在平常開發中,Hibernate Validator常常用來驗證bean的字段,基於註解,方便快捷高效。git
1. Bean Validation 中內置的 constraint正則表達式
註解 做用算法
@Valid | 被註釋的元素是一個對象,須要檢查此對象的全部字段值 |
---|---|
@Null | 被註釋的元素必須爲 null |
@NotNull | 被註釋的元素必須不爲 null |
@AssertTrue | 被註釋的元素必須爲 true |
@AssertFalse | 被註釋的元素必須爲 false |
@Min(value) | 被註釋的元素必須是一個數字,其值必須大於等於指定的最小值 |
@Max(value) | 被註釋的元素必須是一個數字,其值必須小於等於指定的最大值 |
@DecimalMin(value) | 被註釋的元素必須是一個數字,其值必須大於等於指定的最小值 |
@DecimalMax(value) | 被註釋的元素必須是一個數字,其值必須小於等於指定的最大值 |
@Size(max, min) | 被註釋的元素的大小必須在指定的範圍內 |
@Digits (integer, fraction) | 被註釋的元素必須是一個數字,其值必須在可接受的範圍內 |
@Past | 被註釋的元素必須是一個過去的日期 |
@Future | 被註釋的元素必須是一個未來的日期 |
@Pattern(value) | 被註釋的元素必須符合指定的正則表達式 |
2. Hibernate Validator 附加的 constraint數組
註解 | 做用 |
---|---|
被註釋的元素必須是電子郵箱地址 | |
@Length(min=, max=) | 被註釋的字符串的大小必須在指定的範圍內 |
@NotEmpty | 被註釋的字符串的必須非空 |
@Range(min=, max=) | 被註釋的元素必須在合適的範圍內 |
@NotBlank | 被註釋的字符串的必須非空 |
---|---|
@URL(protocol=, host=, port=, regexp=, flags=) |
被註釋的字符串必須是一個有效的url |
@CreditCardNumberurl |
被註釋的字符串必須經過Luhn校驗算法, 銀行卡,信用卡等號碼通常都用Luhn 計算合法性 |
@ScriptAssert (lang=, script=, alias=) |
要有Java Scripting API 即JSR 223 ("Scripting for the JavaTM Platform")的實現 |
@SafeHtml (whitelistType=, additionalTags=) |
classpath中要有jsoup包 |
hibernate補充的註解中,最後3個不經常使用,可忽略。spa
主要區分下@NotNull @NotEmpty @NotBlank 3個註解的區別:.net
@NotNull 任何對象的value不能爲nullhibernate
@NotEmpty 集合對象的元素不爲0,即集合不爲空,也能夠用於字符串不爲nullcode
@NotBlank 只能用於字符串不爲null,而且字符串trim()之後length要大於0
示例:
@DecimalMin(value = "0.1",message = "價格大於0.1元") @NotNull(message = "current_price 爲空") private Float current_price; @Length(max = 14, message = "菜品名字小於15") @NotBlank(message = "菜品名爲空") private String name; //菜品名 ,惟一 @Length(max = 125, message = "第三方菜品id太長") @NotBlank(message = "第三方菜品id 爲空") private String other_dish_id; //第三方菜品id @Min(value = 100, message = "菜品id 爲空") private Long dish_id; //菜品id @Range(min = 0, max = 1, message = "same_open_time 值錯誤") @NotNull(message = "same_open_time 爲 null") private Integer same_open_time; //可售時間{1: 同接單時間,0:自定義時間,此時available_times可用} @Min(value = 1, message = "起訂數大於1") @NotNull(message = "min_order_number 爲 null") private Integer min_order_number = 1; //起訂數 @Length(max = 299, message = "description 小於300") private String description; //菜品描述 private String url; //圖片地址 @Range(min = 0, max = 1, message = "is_low_definition_img 值錯誤") private Integer is_low_definition_img; //是否爲低清圖,0高清,1:低清(添加菜品時,該值爲0) //新增必填字段 @Size(min = 1, max = 1, message = "不能綁定多個分類") @NotEmpty(message = "dish_category_ids 爲空") private Long[] dish_category_ids; //菜品所屬分類id @Valid @NotEmpty(message = "norms 爲空") private List<BDFoodNorm> norms; //菜品規格 @Range(min = 0, max = 5, message = "餐盒數在0-5之間") @NotNull(message = "餐盒數爲空") private Integer box_number; //餐盒數 box_dish_number個菜品 box_number 個餐盒 @Range(min = 1, max = 10, message = "菜品數在1-10之間") @NotNull(message = "菜品數爲空") private Integer box_dish_number; //菜品數 box_dish_number個菜品 box_number 個餐盒 //新增可選字段 // private BigInteger id; //未知.. 通常爲空 @Valid @Size(max = 4,message = "菜品屬性最多4條") private List<BDFoodAttr> attr; //菜品屬性 private String gallery_img_id; //圖片庫圖片id /** * 二維數組 * [0][週日]、[1][週一]、[2][週二]、[3][週三]、[4][週四]、[5][週五]、[6][週六] */ @NotNull(message = "available_times 爲空") private DBFoodAvailableTime[][] available_times; //可售時間,第一維是可售星期{0:星期日,1:星期一,...},第二維是銷售時間