數據驗證是企業應用開發中必備可少的環節,一般若是使用if-else
在業務代碼中寫死驗證邏輯,會致使驗證邏輯與業務邏輯耦合。java
public class BadDemo { public void bad(String str){ if(null == str){ throw new NullPointerException("str 不能爲空"); } // todo 業務邏輯 } }
上述代碼,若是須要修改驗證,
str
不爲空且長度大於8
,只能強行修改代碼。git
pom.xml
依賴<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
@Data public class User { @NotNull(message = "名字不能爲空") @Length(min = 4, max = 10, message = "name 長度必須在 {min} - {max} 之間") private String name; @NotNull(message = "年齡不能爲空") @Min(value = 18, message = "年齡不能小於18歲") private Integer age; }
JSR-303
註解解釋github
註解 | 說明 |
---|---|
@NotNull |
限制必須不爲null |
@NotEmpty |
驗證註解的元素值不爲 null 且不爲空(字符串長度不爲0、集合大小不爲0) |
@NotBlank |
驗證註解的元素值不爲空(不爲null、去除首位空格後長度爲0),不一樣於@NotEmpty,@NotBlank只應用於字符串且在比較時會去除字符串的空格 |
@Pattern(value) |
限制必須符合指定的正則表達式 |
@Size(max,min) |
限制字符長度必須在 min 到 max 之間(也能夠用在集合上) |
@Email |
驗證註解的元素值是Email,也能夠經過正則表達式和flag指定自定義的email格式 |
@Max(value) |
限制必須爲一個不大於指定值的數字 |
@Min(value) |
限制必須爲一個不小於指定值的數字 |
@DecimalMax(value) |
限制必須爲一個不大於指定值的數字 |
@DecimalMin(value) |
限制必須爲一個不小於指定值的數字 |
@Null |
限制只能爲null(不多用) |
@AssertFalse |
限制必須爲false (不多用) |
@AssertTrue |
限制必須爲true (不多用) |
@Past |
限制必須是一個過去的日期 |
@Future |
限制必須是一個未來的日期 |
@Digits(integer,fraction) |
限制必須爲一個小數,且整數部分的位數不能超過 integer,小數部分的位數不能超過 fraction (不多用) |
javax.validation
包下的註解,同理在 spring-boot-starter-web
包中也存在 hibernate-validator
驗證包,裏面包含了一些 javax.validation
沒有的註解,有興趣的能夠看看Controller
層@Validated @RestController public class UserController { @PostMapping("/user") public R addUser(@Validated @RequestBody User user, BindingResult br){ if(br.hasErrors()){ return R.isFail().msg(br.getFieldError().getDefaultMessage()); } else { return R.isOk().data(user); } } @GetMapping("/user") public R test2( @NotBlank(message = "name 不能爲空") @Length(min = 2, max = 10, message = "name 長度必須在 {min} - {max} 之間") String name ) { return R.isOk().data(name); } }
註解解釋web
@Validated
: 開啓數據有效性校驗,添加在類上即爲驗證方法,添加在方法參數中即爲驗證參數對象。(添加在方法上無效)@NotBlank
: 被註釋的字符串不容許爲空@Length
: 被註釋的字符串的大小必須在指定的範圍內@NotNull
: 被註釋的字段不容許爲空@DecimalMin
: 被註釋的字段必須大於或等於指定的數值說點什麼呢,有任何建議,歡迎留言探討,本文源碼。正則表達式
歡迎關注博主公衆號,第一時間推送最新文章spring