白癜风可以治吗 https://m.39.net/pf/a_7143439.html大家好,我是飘渺。
前几天写了一篇SpringBoot如何统一后端返回格式?老鸟们都是这样玩的!阅读效果还不错,而且被很多号主都转载过,今天我们继续第二篇,来聊聊在SprinBoot中如何集成参数校验Validator,以及参数校验的高阶技巧(自定义校验,分组校验)。
此文是依赖于前文的代码基础,已经在项目中加入了全局异常校验器。(代码仓库在文末)
首先我们来看看什么是Validator参数校验器,为什么需要参数校验?
为什么需要参数校验
在日常的接口开发中,为了防止非法参数对业务造成影响,经常需要对接口的参数做校验,例如登录的时候需要校验用户名密码是否为空,创建用户的时候需要校验邮件、手机号码格式是否准确。靠代码对接口参数一个个校验的话就太繁琐了,代码可读性极差。
Validator框架就是为了解决开发人员在开发的时候少写代码,提升开发效率;Validator专门用来进行接口参数校验,例如常见的必填校验,mail格式校验,用户名必须位于6到1之间等等…
Validator校验框架遵循了JSR-0验证规范(参数校验规范),JSR是JavaSpcificationRqusts的缩写。
接下来我们看看在SpringbBoot中如何集成参数校验框架。
SpringBoot中集成参数校验
第一步,引入依赖
dpndncygroupIdorg.springframwork.boot/groupIdartifactIdspring-boot-startr-wb/artifactId/dpndncydpndncygroupIdorg.springframwork.boot/groupIdartifactIdspring-boot-startr-validation/artifactId/dpndncy
注:从springboot-.开始,校验包被独立成了一个startr组件,所以需要引入validation和wb,而springboot-.之前的版本只需要引入wb依赖就可以了。
第二步,定义要参数校验的实体类
DatapublicclassValidVO{privatStringid;
Lngth(min=6,max=1,mssag="appId长度必须位于6到1之间")privatStringappId;NotBlank(mssag="名字为必填项")privatStringnam;Email(mssag="请填写正确的邮箱地址")privatStringmail;privatStringsx;NotEmpty(mssag="级别不能为空")privatStringlvl;}
在实际开发中对于需要校验的字段都需要设置对应的业务提示,即mssag属性。
常见的约束注解如下:
注:此表格只是简单的对注解功能的说明,并没有对每一个注解的属性进行说明;可详见源码。
第三步,定义校验类进行测试
RstControllr
Slf4jValidatdpublicclassValidControllr{ApiOpration("RqustBody校验")PostMapping("/valid/tst1")publicStringtst1(ValidatdRqustBodyValidVOvalidVO){log.info("validEntityis{}",validVO);turn"tst1validsuccss";}ApiOpration("Form校验")PostMapping(valu="/valid/tst")publicStringtst(ValidatdValidVOvalidVO){log.info("validEntityis{}",validVO);turn"tstvalidsuccss";} ApiOpration("单参数校验")PostMapping(valu="/valid/tst")publicStringtst(EmailStringmail){log.info("mailis{}",mail);turn"mailvalidsuccss";}}
这里我们先定义三个方法tst1,tst,tst,tst1使用了
RqustBody注解,用于接受前端发送的json数据,tst模拟表单提交,tst模拟单参数提交。注意,当使用单参数校验时需要在Controllr上加上Validatd注解,否则不生效。
第四步,体验效果
调用tst1方法,提示的是org.springframwork.wb.bind.MthodArgumntNotValidExcption异常
POST