validation主要是校驗用戶提交的數據的合法性,比如是否為空,密碼是否符合規則,郵箱格式是否正確等等,校驗框架比較多,用的比較多的是hibernate-validator, 也支持國際化,也可以自定義校驗類型的註解,這裡只是簡單的演示校驗框架在Spring Boot中的簡單集成,要想了解更多可以參考 hibernate-validator
1. pom.xml
<code> org.springframework.boot spring-boot-starter-validation /<code>
2. dto
<code>public class UserInfoIDto { private Long id; @NotBlank @Length(min=3, max=10) private String username; @NotBlank @Email private String email; @NotBlank @Pattern(regexp="^((13[0-9])|(15[^4,\\D])|(18[0,3-9]))\\d{8}$", message="手機號格式不正確") private String phone; @Min(value=18) @Max(value = 200) private int age; @NotBlank @Length(min=6, max=12, message="暱稱長度為6到12位") private String nickname; // Getter & Setter }/<code>
3. controller
<code>import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; @RestController public class SimpleController { @PostMapping("/users") public String register(@Valid @RequestBody UserInfoIDto userInfoIDto, BindingResult result){ if (result.hasErrors()) { FieldError fieldError = result.getFieldError(); String field = fieldError.getField(); String msg = fieldError.getDefaultMessage(); return field + ":" + msg; } System.out.println("開始註冊用戶..."); return "success"; } }/<code>
4. 常用的約束註解
- @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(regex=,flag=) 被註釋的元素必須符合指定的正則表達式
- Hibernate Validator 附加的 constraint
- @NotBlank(message =) 驗證字符串非null,且長度必須大於0
- @Email 被註釋的元素必須是電子郵箱地址
- @Length(min=,max=) 被註釋的字符串的大小必須在指定的範圍內
- @NotEmpty 被註釋的字符串的必須非空
- @Range(min=,max=,message=) 被註釋的元素必須在合適的範圍內
- @URL(protocol=,host=, port=, regexp=, flags=) 被註釋的字符串必須是一個有效的url
- @CreditCardNumber 被註釋的字符串必須通過Luhn校驗算法,銀行卡,信用卡等號碼一般都用Luhn計算合法性
- @ScriptAssert(lang=,>
- @SafeHtml(whitelistType=, additionalTags=) classpath中要有jsoup包