我们在做与前端交互的后天应用接口的过程中,会定义很多对应的接口及参数,而有些接口参数有一定的要求,比如最大值、最小值约束,涉及到手机号、身份证等规则校验,参数是否为空等等,刚进入java领域的小伙伴们大部分第一时间都是针对每个参数进行一一判别校验、当接口参数校验,判断逻辑代码就显得极其冗杂,不美观也不便于阅读。其实我们可以使用validation结合spring进行参数的校验,并且通过Controller增强器@ControllerAdvice来定义全局异常处理类,配合@ExceptionHandler可以更加优雅的处理参数的校验问题。
话不多说,看代码:
1.新增全局异常处理
@ControllerAdvice
2.定义参数
基础请求参数:
/*
@NotBlank针对于String类型,不能为空串或者全部空格的参数
@Min @Max 可以限制参数的最小、最大值
复杂请求参数
@ApiModel
@Valid 放在对象属性上,可以是对象内的参数约束生效
3.定义controller
@RequestMapping
上面源码可以看到,testParam接口和testOrderParam两个接口使用的注解不一样,一个是@Valid、另一个是@Validated,两个稍有区别,前者使得当前对象内属性校验生效,如果包含对象属性,则对象属性自身的属性校验无法生效,而后者注释的对象,对象内部配合@Valid可以使得对象内部的对象属性的属性校验规则生效。
请求效果
项目引入swagger2,便于演示结果:
普通参数请求
请求参数
响应结果:
请求参数我全部设置的不满足规则,响应结果输出了所有的校验不通过的信息。
复杂参数请求
请求参数
响应结果
如上可以看到,商品编号属性是OrderRequest中的productRequestList的属性,依然能够成功校验,另外,productCode和productName,传递参数的时候都是给到的空串,由于两者的使用的注解不一样,其中商品名称被拦截,商品编码规则通过,这也是针对String类型参数时,@NotBlank与@NotNull的不同之处。
本文就简单的介绍在这里,有兴趣的小伙伴可以访问我的github地址,本文的源码请点击;
源码的全局异常处理类还有很多其他的异常拦截处理,可供参考。
更多文章请访问:
技术小白成长之路www.itstabber.com