服務端數據校驗

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對象,將自己需要的數據提取出來處理 (可省略))即可完成數據校驗.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章