JSR303校验的基本使用和结合AOP使用
[一]:基本使用
springboot默认导入第三方校验框架hibernate-validator
使用JSR303三大步骤
一.先给需要校验数据的javabean上标注校验注解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class UmsAdminParam { @ApiModelProperty (value = "用户名" , required = true ) @Length (min = 6 ,max = 20 ,message = "用户名长度必须是6-18位" ) private String username; @ApiModelProperty (value = "密码" , required = true ) @NotEmpty (message = "密码不能为空" ) private String password; @ApiModelProperty (value = "用户头像" ) private String icon; @ApiModelProperty (value = "邮箱" ) @Email (message = "邮箱格式不合法" ) private String email; @ApiModelProperty (value = "用户昵称" ) private String nickName; @ApiModelProperty (value = "备注" ) private String note; } |
能使用的校验注解:
1.在hibernate-vaidator包下自带的注解:org.hibernate.validator.constraints下面所有注解
2.JSR303钟规定的注解 :javax.validation.constraints下所有的注解
二.告诉springboot,需要校验
在方法中加上@Valid注解
springmvc进入方法之前,确定参数值的时候就会校验,如果校验出错,直接返回错误不执行controller代码
三.感知校验成功还是失败
在开启了校验javaBean参数后面,紧跟一个BindingResult对象,就可以获取到校验结果
只要有BindingResult,即使校验没通过,方法也会执行,我们需要手动处理。
测试结果:
[二]:结合AOP
使用了BindingResult参数后,需要在每个校验方法中手动处理,较为麻烦,故考虑可以使用AOP统一处理。
当我们编写环绕通知的时候,目标方法出现的异常一定要抛出去。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | @Aspect @Component //使用环绕通知 public class DataValidAspect { @Around ( "execution(* com.wj.gmall.admin..*Controller.*(..))" ) public Object valid(ProceedingJoinPoint point){ Object proceed = null ; try { Object[] args = point.getArgs(); for (Object arg : args) { if (arg instanceof BindingResult){ BindingResult result = (BindingResult)arg; if (result.getErrorCount()> 0 ){ //框架自动校验检测未通过 return new CommonResult().validateFailed(result); } } } //调用目标方法 proceed = point.proceed(args); } catch (Throwable throwable) { throwable.printStackTrace(); throw new RuntimeException(throwable); } return proceed; } } |
标签:
java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix