竹笋

注册

 

发新话题 回复该主题

SpringBoot如何进行参数校验,老 [复制链接]

1#
白癜风可以治吗 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

Slf4j

ValidatdpublicclassValidControllr{

ApiOpration("RqustBody校验")

PostMapping("/valid/tst1")publicStringtst1(

Validatd

RqustBodyValidVOvalidVO){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

分享 转发
TOP
发新话题 回复该主题