Springboot中優(yōu)雅進(jìn)行字段校驗(yàn)
代碼托管倉庫:https://gitee.com/suzhou-mopdila-information/ruyuan-dfs

長按掃描上方免費(fèi)參加
來源:https://juejin.cn/post/6913735652806754311
| Controller層 VS Service層
去網(wǎng)上查閱了一些資料,一般推薦與業(yè)務(wù)無關(guān)的放在Controller層中進(jìn)行校驗(yàn),而與業(yè)務(wù)有關(guān)的放在Service層中進(jìn)行校驗(yàn)。
那么如何將參數(shù)校驗(yàn)寫的優(yōu)雅美觀呢,如果都是if - else,就感覺代碼寫的很low,還好有輪子可以使用。
| 常用校驗(yàn)工具類
使用Hibernate Validate
引入依賴
????org.hibernate
????hibernate-validator
????4.3.1.Final ?
常用注解說明

使用姿勢
需要搭配在Controller中搭配@Validated或@Valid注解一起使用,@Validated和@Valid注解區(qū)別不是很大,一般情況下任選一個即可,區(qū)別如下:

雖然@Validated比@Valid更加強(qiáng)大,在@Valid之上提供了分組功能和驗(yàn)證排序功能,不過在實(shí)際項(xiàng)目中一直沒有用到過。
Hibernate-validate框架中的注解是需要加在實(shí)體中一起使用的。
public?class?DataSetSaveVO?{
????//唯一標(biāo)識符為空
????@NotBlank(message?=?"user?uuid?is?empty")
????//用戶名稱只能是字母和數(shù)字
????@Pattern(regexp?=?"^[a-z0-9]+$",?message?=?"user?names?can?only?be?alphabetic?and?numeric")
????@Length(max?=?48,?message?=?"user?uuid?length?over?48?byte")
????private?String?userUuid;
????//數(shù)據(jù)集名稱只能是字母和數(shù)字
????@Pattern(regexp?=?"^[A-Za-z0-9]+$",?message?=?"data?set?names?can?only?be?letters?and?Numbers")
????//文件名稱過長
????@Length(max?=?48,?message?=?"file?name?too?long")
????//文件名稱為空
????@NotBlank(message?=?"file?name?is?empty")
????private?String?name;
????//數(shù)據(jù)集描述最多為256字節(jié)
????@Length(max?=?256,?message?=?"data?set?description?length?over?256?byte")
????//數(shù)據(jù)集描述為空
????@NotBlank(message?=?"data?set?description?is?null")
????private?String?description;
}
說明:message字段為不符合校驗(yàn)規(guī)則時拋出的異常信息。
@PostMapping
public?ResponseVO?createDataSet(@Valid?@RequestBody?DataSetSaveVO?dataSetVO)?{
????return?ResponseUtil.success(dataSetService.saveDataSet(dataSetVO));
}
說明:在校驗(yàn)的實(shí)體DataSetSaveVO旁邊添加@Valid或@Validated注解。
使用commons-lang3
引入依賴
????org.apache.commons
????commons-lang3
????3.4
常用方法說明

測試代碼
//StringUtils.isEmpty
System.out.println(StringUtils.isEmpty(""));??//true
System.out.println(StringUtils.isEmpty("??"));??//false
//StringUtils.isNotEmpty
System.out.println(StringUtils.isNotEmpty(""));??//false
????????
//StringUtils.isBlank
System.out.println(StringUtils.isBlank(""));??//true
System.out.println(StringUtils.isBlank("?"));??//true
//StringUtils.isNotBlank
System.out.println(StringUtils.isNotBlank("?"));??//false
List?emptyList?=?new?ArrayList<>();
List?nullList?=?null;
List?notEmptyList?=?new?ArrayList<>();
notEmptyList.add(1);
//CollectionUtils.isEmpty
System.out.println(CollectionUtils.isEmpty(emptyList));???//true
System.out.println(CollectionUtils.isEmpty(nullList));???//true
System.out.println(CollectionUtils.isEmpty(notEmptyList));???//false
//CollectionUtils.isNotEmpty
System.out.println(CollectionUtils.isNotEmpty(emptyList));???//false
System.out.println(CollectionUtils.isNotEmpty(nullList));???//false
System.out.println(CollectionUtils.isNotEmpty(notEmptyList));???//true
| 自定義注解
關(guān)注公眾號【Java技術(shù)江湖】后回復(fù)“PDF”即可領(lǐng)取200+頁的《Java工程師面試指南》
強(qiáng)烈推薦,幾乎涵蓋所有Java工程師必知必會的知識點(diǎn),不管是復(fù)習(xí)還是面試,都很實(shí)用。

