Spring Boot 2.x 編寫 RESTful API (二) 校驗
阿新 • • 發佈:2019-04-04
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 (二) 校驗