javascript
SpringBoot - 优雅的实现【参数分组校验】高级进阶
文章目錄
- Pre
- 需求
- 實(shí)現(xiàn)三部曲
- Step1 定義分組接口
- Step2 給參數(shù)分配分組
- Step3 指定分組
- Step4 驗(yàn)證
- 源碼
Pre
SpringBoot - 優(yōu)雅的實(shí)現(xiàn)【參數(shù)校驗(yàn)】高級進(jìn)階
SpringBoot - 優(yōu)雅的實(shí)現(xiàn)【自定義參數(shù)校驗(yàn)】高級進(jìn)階
SpringBoot - 優(yōu)雅的實(shí)現(xiàn)【參數(shù)分組校驗(yàn)】高級進(jìn)階
需求
我們經(jīng)常會(huì)碰到這樣的一個(gè)場景: 新增的時(shí)候某些字段為必填(比如密碼), 更新的時(shí)候非必填。
實(shí)現(xiàn)三部曲
Validator校驗(yàn)框架提供了分組校驗(yàn),可以幫助我們快速的實(shí)現(xiàn)這樣的需求。
Step1 定義分組接口
import javax.validation.groups.Default;/*** @author 小工匠* @version 1.0* @description: TODO* @date 2022/2/21 23:03* @mark: show me the code , change the world*/public interface CustomValidateGroup extends Default {interface Crud extends CustomValidateGroup {interface Create extends Crud {}interface Update extends Crud {}interface Query extends Crud {}interface Delete extends Crud {}} }定義一個(gè)分組接口CustomValidateGroup 讓其繼承javax.validation.groups.Default,再在分組接口中定義出多個(gè)不同的操作類型,Create,Update,Query,Delete.
Step2 給參數(shù)分配分組
@Length(min = 8, max = 12, message = "password長度必須位于8到12之間")@NotNull(groups = CustomValidateGroup.Crud.Create.class,message = "新增接口密碼不能為空")@Null(groups = CustomValidateGroup.Crud.Update.class)private String password;Step3 指定分組
給需要參數(shù)校驗(yàn)的方法指定分組
/*** 新增的時(shí)候 不能為空* @param artisan* @return*/@PostMapping(value = "/add")public String add(@Validated(value = CustomValidateGroup.Crud.Create.class) Artisan artisan){log.info("InComing Param is {}", artisan);return "add valid success";}/*** 更新的時(shí)候 可以為空* @param artisan* @return*/@PostMapping(value = "/update")public String update(@Validated(value = CustomValidateGroup.Crud.Update.class) Artisan artisan){log.info("InComing Param is {}", artisan);return "update valid success";}通過value屬性給add()和update()方法分別指定Create和Update分組
Step4 驗(yàn)證
新增,期望 密碼不能為空 ,我們填個(gè)空試試
【修改】
對于未指定分組的則使用的是默認(rèn)分組 。 比如由于email屬于默認(rèn)分組,而我們的分組接口CustomValidateGroup已經(jīng)繼承了Default分組,所以也是可以對email字段作參數(shù)校驗(yàn)的
如果CustomValidateGroup沒有繼承Default分組,那在代碼屬性上就需要加上@Validated(value = {ValidGroup.Crud.Create.class, Default.class}才能讓email字段的校驗(yàn)生效。
源碼
https://github.com/yangshangwei/boot2
總結(jié)
以上是生活随笔為你收集整理的SpringBoot - 优雅的实现【参数分组校验】高级进阶的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot - 优雅的实现【自
- 下一篇: SpringBoot - 优雅的实现【业