今天繼續為大家分享在工作中如何優雅的校驗接口的參數的合法性以及如何統一處理接口傳回的json格式。每個字都是幹貨,原創不易,分享不易。
validation主要是校驗使用者送出的資料的合法性,比如是否為空,密碼是否符合規則,郵箱格式是否正确等等,校驗架構比較多,用的比較多的是hibernate-validator, 也支援國際化,也可以自定義校驗類型的注解,這裡隻是簡單地示範校驗架構在Spring Boot中的簡單內建,要想了解更多可以參考 hibernate-validator。
1. pom.xml
<dependency>
2. dto
public
3. controller
import org.springframework.validation.BindingResult;
4. 去掉BindingResult參數
每個接口都需要BindingResult參數,而且每個接口都需要處理錯誤資訊,這樣增加一個參數也不優雅,處理錯誤資訊代碼量也很重複。如果去掉BindingResult參數,系統就會報錯MethodArgumentNotValidException,我們隻需要使用全局異常來捕獲該錯誤,處理一下就可以省略傳BindingResult參數了。
@RestController
@RestControllerAdvice 用于攔截所有的@RestController
@RestControllerAdvice
5. 統一傳回格式
錯誤碼枚舉
@Getter
自定義異常。
@Getter
定義傳回格式。
@Getter
全局異常處理器增加對APIException的攔截,并修改異常時傳回的資料格式。
@RestControllerAdvice
SimpleController 增加一個抛出異常的方法。
@RestController
報錯傳回的格式。
不報錯,傳回的格式。
6. 去掉接口中的Response包裝
@RestControllerAdvice既可以全局攔截異常也可攔截指定包下正常的傳回值,可以對傳回值進行修改。
@RestController
7. 每個校驗錯誤都對應不同的錯誤碼
@Retention(RetentionPolicy.RUNTIME)
@Data
校驗異常擷取注解中的錯誤碼。
@ExceptionHandler(MethodArgumentNotValidException.class)
8. 個别接口不統一包裝響應
有時候第三方接口回調我們的接口,我們的接口必須按照第三方定義的傳回格式來,此時第三方不一定和我們自己的傳回格式一樣,是以要提供一種可以繞過統一包裝的方式。
@Retention(RetentionPolicy.RUNTIME)
@RestController
ResponseControllerAdvice 增加一個不包裝的條件,配置了@NotResponseWrap注解就跳過包裝。
@Override