[一]:基本使用
springboot默认导入第三方校验框架hibernate-validator
使用JSR303三大步骤
一.先给需要校验数据的javabean上标注校验注解
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统一处理。
当我们编写环绕通知的时候,目标方法出现的异常一定要抛出去。
@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;
}
}