Like Share Discussion Bookmark Smile

J.J. Huang   2019-04-04   Spring Boot   瀏覽次數:

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
oKongSpringBoot | 第八章:统一异常、数据校验处理文章。
spring boot validator 验证
参数验证 @Validated 和 @Valid 的区别