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