簡書停更
本人主要在頭條號(hào)寫文章嘉赎,可以關(guān)注我的頭條號(hào)【happyjava】钓觉,或者收藏我的個(gè)人博客happy的博客blog.happyjava.cn
大家可以關(guān)注我的頭條號(hào)Happyjava點(diǎn)擊跳轉(zhuǎn)
前言
在開發(fā)接口的時(shí)候焙蚓,參數(shù)校驗(yàn)是必不可少的蝴乔。參數(shù)的類型梯码,長度等規(guī)則牌捷,在開發(fā)初期都應(yīng)該由產(chǎn)品經(jīng)理或者技術(shù)負(fù)責(zé)人等來約定。如果不對入?yún)⒆鲂r?yàn)赡磅,很有可能會(huì)因?yàn)橐恍┎缓戏ǖ膮?shù)而導(dǎo)致系統(tǒng)出現(xiàn)異常魄缚。
上一篇文章講了多種接受參數(shù)的方法【快學(xué)springboot】3.多種接受參數(shù)的方式。因?yàn)槟壳癹son類型的參數(shù)是最常用的焚廊,所以這里只講解json類型的參數(shù)校驗(yàn)冶匹。其他類型的大同小異。
新建一個(gè)Param.java
public class Param {
private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
目前這個(gè)類只有一個(gè)username屬性咆瘟。
使用Validated注解開啟參數(shù)校驗(yàn)
@PostMapping(value = "/validate/notblank")
public Object validateNotBlank(@RequestBody @Validated Param param) {
return param;
}
NotBlank 非空判斷
修改Param.java嚼隘,在username屬性上添加NotBlank注解
@NotBlank
private String username;
測試
通過控制臺(tái),我們可以看到拋出了一個(gè)MethodArgumentNotValidException異常袒餐,上面的返回結(jié)果其實(shí)是springboot默認(rèn)的異常捕獲器返回的飞蛹。為了統(tǒng)一接口的數(shù)據(jù)返回格式,我們也需要自定義一個(gè)全局異常攔截器灸眼,這個(gè)將會(huì)在下一講中講解桩皿。
我們還可以通過NotBlank注解的message屬性設(shè)置異常信息:
@NotBlank(message = "username不可為空")
private String username;
Length字符串長度判斷
還是那個(gè)Param.java,我們給username加上Length注解幢炸,如下:
@Length(min = 2,max = 3)
@NotBlank(message = "username不可為空")
private String username;
同樣泄隔,我們也可以使用message屬性來設(shè)置返回錯(cuò)誤信息。這里就不演示了宛徊。
NotNull 限制屬性不可謂null
雖然前面有NotBlank注解了佛嬉,但是一些Integer,Long等包裝類型,還是需要用到NotNull注解來判斷闸天。
范圍判斷Min和Max
在Param.java上新增一個(gè)age屬性暖呕,并且使用Min和Max注解限定大小
@Min(1)
@Max(100)
private Integer age;
這樣寫的問題是,如果age為空苞氮,則不會(huì)校驗(yàn)湾揽。如下:
所以我們還需要加上NotNull注解
@Min(1)
@Max(100)
@NotNull
private Integer age;
也可使用@Range注解來限定范圍
@Range(min = 1, max = 100)
Email 注解校驗(yàn)郵件
@Email
private String email;
Pattern 注解校驗(yàn)正則表達(dá)式
@Pattern(regexp = "\d{4}-\d{2}-\d{2}")
private String birthday;
總結(jié)
以上總結(jié)了部分常用的參數(shù)校驗(yàn)的方法,當(dāng)然還有很詳細(xì)的一些沒有列舉處理,有需要的库物,可以自行搜索使用方式即可霸旗。參數(shù)校驗(yàn),往往需要和全局的異常攔截器來配套使用戚揭,使得返回的數(shù)據(jù)結(jié)構(gòu)永遠(yuǎn)是保持一致的诱告,這樣才能方便客戶端解釋。
下一節(jié)會(huì)對統(tǒng)一返回格式和全局異常攔截器做一個(gè)講解民晒。