1. 程式人生 > >Spring Boot 2.x 編寫 RESTful API (二) 校驗

Spring Boot 2.x 編寫 RESTful API (二) 校驗

constrain eid 類型 技術 成員 ted hub oot valid

用Spring Boot編寫RESTful API 學習筆記

技術分享圖片

約束規則對子類依舊有效

groups 參數

  • 每個約束用註解都有一個 groups 參數
  • 可接收多個 class 類型 (必須是接口)
  • 不聲明 groups 參數是默認組 javax.validation.groups.Default
  • 聲明了 groups 參數的會從 Default 組移除,如需加入 Default 組需要顯示聲明,例如 @Null(groups={Default.class, Step1.class})

@Valid vs. @Validated

  • @Valid 是 JSR 標準定義的註解,只驗證 Default 組的約束
  • @Validated 是spring 定義的註解,可以通過參數來指定驗證的組,例如:@Validated({Step1.class, Default.class}) 表示驗證 Step1 和 Default 兩個組的約束
  • @Valid 可用在成員變量上,進行級聯驗證;@Validated 只能用在參數上,表示這個參數需要驗證

BindingResult

public Object doSomething(@Validated @RequestBody OneDto oneDto) {
    // 通不過校驗的參數,不會執行這個方法
}


public Object doSomething(@Validated @RequestBody OneDto oneDto, BindingResult result) {
    // 參數通不過校驗也會進入方法執行,校驗結果會通過result參數傳遞進來
    if (result.hasErrors()){
        // 沒通過校驗
    }
}

手動驗證

// 裝載驗證器
@Autowired Validator validator;

// 驗證某個類,下面是執行默認的驗證組,如果需要指定驗證組,多傳一個 class 參數
Set<ConstraintViolation<?>> result = validator.validate(obj);
 
// 通不過校驗 result 的集合會有值,可以通過 size() 判斷

源碼:spring-boot-2-restful

Spring Boot 2.x 編寫 RESTful API (二) 校驗