bean validation校验方法参数_JAVA开发中,API接口如何优雅的进行参数校验?

07a6814d99f9c85c677ae8e74e725214.png

我们在做与前端交互的后天应用接口的过程中,会定义很多对应的接口及参数,而有些接口参数有一定的要求,比如最大值、最小值约束,涉及到手机号、身份证等规则校验,参数是否为空等等,刚进入java领域的小伙伴们大部分第一时间都是针对每个参数进行一一判别校验、当接口参数校验,判断逻辑代码就显得极其冗杂,不美观也不便于阅读。其实我们可以使用validation结合spring进行参数的校验,并且通过Controller增强器@ControllerAdvice来定义全局异常处理类,配合@ExceptionHandler可以更加优雅的处理参数的校验问题。

话不多说,看代码:

1.新增全局异常处理

@ControllerAdvice

2.定义参数

基础请求参数:

/*

@NotBlank针对于String类型,不能为空串或者全部空格的参数

@Min @Max 可以限制参数的最小、最大值

复杂请求参数

@ApiModel

@Valid 放在对象属性上,可以是对象内的参数约束生效

3.定义controller

@RequestMapping

上面源码可以看到,testParam接口和testOrderParam两个接口使用的注解不一样,一个是@Valid、另一个是@Validated,两个稍有区别,前者使得当前对象内属性校验生效,如果包含对象属性,则对象属性自身的属性校验无法生效,而后者注释的对象,对象内部配合@Valid可以使得对象内部的对象属性的属性校验规则生效。

请求效果

项目引入swagger2,便于演示结果:

普通参数请求

请求参数

509385421328dcebaf53415e1dc3b90a.png

响应结果:

c0cca3910507589d0a3cfeea72815916.png

请求参数我全部设置的不满足规则,响应结果输出了所有的校验不通过的信息。

复杂参数请求

请求参数

e32050e13dd10f2c3eb3e66f1f39fb46.png

响应结果

974a00602ec28382abed3f759522d565.png

如上可以看到,商品编号属性是OrderRequest中的productRequestList的属性,依然能够成功校验,另外,productCode和productName,传递参数的时候都是给到的空串,由于两者的使用的注解不一样,其中商品名称被拦截,商品编码规则通过,这也是针对String类型参数时,@NotBlank与@NotNull的不同之处。

本文就简单的介绍在这里,有兴趣的小伙伴可以访问我的github地址,本文的源码请点击;

源码的全局异常处理类还有很多其他的异常拦截处理,可供参考。

更多文章请访问:

技术小白成长之路​www.itstabber.com
ee3245ab82ab6bd76279b24b64a2e696.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值