网站首页 > 技术教程 正文
前言
在接口开发中,经常是需要对传入参数完整性进行验证的,或者对手机号格式进行验证等,而一般不了解@Valid注解之前,都是通过自己封装方法来验证,都是一堆if else集合,这样判断对于代码结构很不友好,开发效率也不高,使用@Valid注解可以快速的对参数进行验证,并且可以通过抓取全局异常,从而实现统一返回
引用
@Valid是使用hibernate validation的时候使用,其中java的jsr303声明了这类接口,hibernate-validator对其进行了实现
在进行maven整合时,需要引入的依赖
<dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.13.Final</version> </dependency>
一般情况下早已被其他框架引入了,只是在不存在的时候需要进行引用一下,@Valid只是验证参数是否符合要求,但是具体参数需要符合什么要求,还是需要其他注解来标志验证规则
验证规则标签
@Null 验证对象是否为null
@NotNull 验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查约束元素是否为NULL或者是EMPTY.
@AssertTrue 验证 Boolean 对象是否为 true
@AssertFalse 验证 Boolean 对象是否为 false
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=) 验证字符串长度是否在给定的范围之内
@Past 验证 Date 和 Calendar 对象是否在当前时间之前
@Future 验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern 验证 String 对象是否符合正则表达式的规则
@Min 验证 Number 和 String 对象是否大等于指定的值
@Max 验证 Number 和 String 对象是否小等于指定的值
@DecimalMax 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度
@DecimalMin 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度
@Digits 验证 Number 和 String 的构成是否合法
@Digits(integer=,fraction=) 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。
@Range(min=, max=) 验证元素是否在合适的范围内
@Email 验证是否是邮件地址,如果为null,不进行验证,算通过验证。
使用
在需要验证的类属性上添加相应的注解,如:
import lombok.Data; import org.hibernate.validator.constraints.NotBlank; @Data public class LoginVO { @NotBlank private String username; @NotBlank private String password; }
在SpringMVC控制层中使用@Valid注解进行验证,并判断是否有异常
@PostMapping("login") public String login(@Valid LoginVO vo, Errors errors){ if (errors.hasErrors()) { List<FieldError> list = errors.getFieldErrors(); StringBuffer sb = new StringBuffer("参数:"); for(FieldError error : list){ sb.append(error.getField()).append(","); } sb.append("不符合要求"); return sb.toString(); } return "验证通过"; }
当然上面Controller层的代码非常容易重复,毕竟差不多的方法都需要验证参数,所以为了方面和简洁代码,可以通过抓取全局异常的方式返回提示信息
全局异常处理
通过配置全局异常处理方法,抓取BindException,返回异常提示信息
import com.wxkingbos.patrol.model.WebResult; import org.springframework.validation.BindException; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; /** * 全局异常处理器 * Created by Raye on 2019-04-15 */ @ControllerAdvice public class ExceptionControllerAdvice { @ExceptionHandler(BindException.class) @ResponseBody public String bindExceptionHandler(BindException ex){ if(ex.hasErrors()){ List<FieldError> list = ex.getFieldErrors(); StringBuffer sb = new StringBuffer("参数:"); for(FieldError error : list){ sb.append(error.getField()).append(","); } sb.append("不符合要求"); return sb.toString(); } return ex.getMessage(); } }
同理,也可以采用此方法抓取其他全局异常,进行异常日志捕捉获取其他异常提示,另外以上全局异常配置只有在Springboot项目上运行过,因为现在项目差不多都是基于Springboot构建的了,所以也没有在非Springboot上面测试过可行性。
感兴趣的小伙伴可以来我的Java交流群,可以获取免费的学习资料 828 697 593
对Java技术,架构技术感兴趣的同学,欢迎加群,一起学习,相互讨论。
猜你喜欢
- 2024-09-24 SAP执行QS51维护UD的选择集,报错 – Transaction no longer valid
- 2024-09-24 开机显示invalid partition table(无效的磁盘分区)
- 2024-09-24 2021-09-22:请你判断一个 9x9 的数独是否有效。只需要 根据以下规
- 2024-09-24 编码规范-Python:valid-classmethod-first-arg限制
- 2024-09-24 最好用的MODBUS测试软件MODSCAN
- 2024-09-24 Ubuntu系统怎么设置静态ip?同样适用于深度系统的教程
- 2024-09-24 tomcat8拦截不合法字符的解决方法
- 2024-09-24 LeetCode 65. Valid Number
- 2024-09-24 SpringValid优雅校验入参
- 2024-09-24 springboot中注解校验@Valid@Validated失效场景汇总(持续更新)
你 发表评论:
欢迎- 05-1613步震撼淘宝大促闪光裂纹破墙立体字PS制作教程
- 05-16AI教程 | 绘制扁平的萌萌哒图标
- 05-160基础学平面设计所需了解的基础常识汇总
- 05-16自学平面设计需要多长时间?十六年职业设计总监告诉你
- 05-16平面设计都要学习哪些内容?
- 05-16李涛PS教程 高手之路PS教程 合成教程 —制作一个小星球
- 05-16Illustrator实例教程:制作炫酷的漩涡效果
- 05-16Illustrator实例教程:利用混合工具制作一朵炫酷的花
- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)