SpringBoot - 第二十一章 | 資料驗證(三)
基本定義的驗證基本上已經夠我們使用了,但是在開發過程中,往往會有一些特殊的驗證而且重複使用率極高,所以這邊要介紹自定義驗證註解,還有驗證的部分,我們可以結合 第十八章 - SpringBoot 統一異常處理 來做不同的返回或是處理,以下也會特別一起做介紹。
自定義註解
自定義註解,主要時實現ConstraintValidator的處理類即可,這裡已編寫一個校驗常量的註解為例:參數值只能為特定的值。
建立 Demo (實體)
建立 TestValidation (自定義註解)
建立 TestValidatorHandler (自定義註解處理類)
建立 DemoControll
測試
參數1.0
http://localhost:8080/demo?version=1.0
參數1.1
http://localhost:8080/demo?version=1.1
上面的簡單範例自定義註解的使用,大家可以根據自己的需求去做修改。
統一異常處理
校驗不通過時,返回的異常訊息是不友好的,此時可利用統一異常處理,對校驗異常進行特殊處理,特別說明下,對於異常處理類共有以下幾種情況(被 @RequestBody 和 @RequestParam 註解的請求實體,校驗異常類是不同的)
建立 CommonExceptionHandler
編輯 DemoController
測試
瀏覽器訪問
http://localhost:8080/demo/manvException?version=1.1
由於這個Method.POST,不支援GET,所以被exceptionHandler處理了
Postman訪問
http://localhost:8080/demo/manvException?version=1.1
可以看到被@ExceptionHandler(MethodArgumentNotValidException.class)處理,代碼:01003
瀏覽器訪問
http://localhost:8080/demo/bindException?version=1.1
可以看到被@ExceptionHandler(BindException.class)處理,代碼:01002
註:以上參考了
JSR 303: Bean Validation
The Bean Validation reference implementation
oKong 的 SpringBoot | 第八章:统一异常、数据校验处理文章。
spring boot validator 验证
参数验证 @Validated 和 @Valid 的区别