Hibernate Validator是Hibernate提供的一個開源框架,使用註解方式非常方便的實現服務端的數據校驗。
Hibernate Validator 提供了 JSR 303 規範中所有內置 constraint(約束) 的實現,除此之外還有一些附加的 constraint。
在日常開發中,Hibernate Validator經常用來驗證bean的字段,基於註解,方便快捷高效。
常用註解如下:
| **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)** | 被註釋的元素必須符合指定的正則表達式 |
| **@Email** | 被註釋的元素必須是電子郵箱地址 |
| **@Length** | 被註釋的字符串的大小必須在指定的範圍內 |
| **@NotEmpty** | 被註釋的字符串的必須非空 |
| **@Range** | 被註釋的元素必須在合適的範圍內 |
| **@NotBlank** | 被註釋的字符串的必須非空 |
| **@URL(protocol=,host=, port=,regexp=, flags=)** | 被註釋的字符串必須是一個有效的url |
| **@CreditCardNumber** | 被註釋的字符串必須通過Luhn校驗算法,銀行卡,信用卡等號碼一般都用Luhn計算合法性 |
用法:
1)引入依賴
<dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> </dependency>
2)在po類加上註解
@Id @KeySql(useGeneratedKeys = true) private Long id; @NotEmpty(message = "用戶名不能爲空!") @Length(min = 4, max = 15, message = "長度在4-15") private String username;// 用戶名 //不被json化 @Length(min = 4, max = 15, message = "密碼長度在4-15") @JsonIgnore private String password;// 密碼 @Pattern(regexp = "^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$", message = "手機號不正確") private String phone;// 電話
3)在controller中的接口參數中給對象加上@Valid
@PostMapping("register") public Result register(@Valid User user, BindingResult result, @RequestParam("code") String code) { // if (result.hasFieldErrors()) { // throw new RuntimeException(result.getFieldErrors().stream(). // map(e -> e.getDefaultMessage()).collect(Collectors.joining("|"))); // } userService.register(user, code); return new Result(ResponseStatusEnum.CREATED.getCode(),"創建成功"); } }
(加入BindingResult對象,將自己需要的數據提取出來處理 (可省略))即可完成數據校驗.