Spring Boot集成validation用於優雅的校驗API參數的合法性

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包