Loading

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;
    }
}
posted @   秋风飒飒吹  阅读(405)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· 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
点击右上角即可分享
微信分享提示