在開發接口的時候,參數校驗是必不可少的。參數的類型,長度等規則,在開發初期都應該由產品經理或者技術負責人等來約定。若是不對入參作校驗,頗有可能會由於一些不合法的參數而致使系統出現異常。java
上一篇文章講了多種接受參數的方法【快學springboot】3.多種接受參數的方式。由於目前json類型的參數是最經常使用的,因此這裏只講解json類型的參數校驗。其餘類型的大同小異。正則表達式
public class Param {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
複製代碼
目前這個類只有一個username屬性。spring
@PostMapping(value = "/validate/notblank")
public Object validateNotBlank(@RequestBody @Validated Param param) {
return param;
}
複製代碼
修改Param.java,在username屬性上添加NotBlank註解json
@NotBlank
private String username;
複製代碼
測試springboot
經過控制檯,咱們能夠看到拋出了一個MethodArgumentNotValidException異常,上面的返回結果實際上是springboot默認的異常捕獲器返回的。爲了統一接口的數據返回格式,咱們也須要自定義一個全局異常攔截器,這個將會在下一講中講解。bash
咱們還能夠經過NotBlank註解的message屬性設置異常信息:數據結構
@NotBlank(message = "username不可爲空")
private String username;
複製代碼
仍是那個Param.java,咱們給username加上Length註解,以下:app
@Length(min = 2,max = 3)
@NotBlank(message = "username不可爲空")
private String username;
複製代碼
一樣,咱們也可使用message屬性來設置返回錯誤信息。這裏就不演示了。測試
雖然前面有NotBlank註解了,可是一些Integer,Long等包裝類型,仍是須要用到NotNull註解來判斷。ui
在Param.java上新增一個age屬性,而且使用Min和Max註解限定大小
@Min(1)
@Max(100)
private Integer age;
複製代碼
這樣寫的問題是,若是age爲空,則不會校驗。以下:
因此咱們還須要加上NotNull註解
@Min(1)
@Max(100)
@NotNull
private Integer age;
複製代碼
@Range(min = 1, max = 100)
複製代碼
@Email
private String email;
複製代碼
@Pattern(regexp = "\d{4}-\d{2}-\d{2}")
private String birthday;
複製代碼
以上總結了部分經常使用的參數校驗的方法,固然還有很詳細的一些沒有列舉處理,有須要的,能夠自行搜索使用方式便可。參數校驗,每每須要和全局的異常攔截器來配套使用,使得返回的數據結構永遠是保持一致的,這樣才能方便客戶端解釋。
下一節會對統一返回格式和全局異常攔截器作一個講解。