SpringBoot基礎教程2-1-7 數據驗證-基礎數據驗證

1. 概述

數據驗證是企業應用開發中必備可少的環節,一般若是使用if-else在業務代碼中寫死驗證邏輯,會致使驗證邏輯與業務邏輯耦合。java

2. 不合理的驗證方式

public class BadDemo {

    public void bad(String str){
    	if(null == str){
            throw new NullPointerException("str 不能爲空");
    	}
    	
        // todo 業務邏輯
    }
}

上述代碼,若是須要修改驗證,str不爲空且長度大於8,只能強行修改代碼。git

3. 優雅的數據驗證方式

3.1. 添加pom.xml依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

3.2 建立實體類

@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 沒有的註解,有興趣的能夠看看

3.3 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: 被註釋的字段必須大於或等於指定的數值

4. 測試結果

5. 工程目錄

6. 結束語

說點什麼呢,有任何建議,歡迎留言探討,本文源碼正則表達式


歡迎關注博主公衆號,第一時間推送最新文章spring

歡迎關注博主公衆號

相關文章
相關標籤/搜索