Hibernate Validator
Hibernate Validator是SpringBoot内置的校验框架,只要集成了SpringBoot就自动集成了它,我们可以通过在对象上面使用它提供的注解来完成参数校验
常用注解
@Null:被注释的属性必须为null;
@NotNull:被注释的属性不能为null;
@AssertTrue:被注释的属性必须为true;
@AssertFalse:被注释的属性必须为false;
@Min:被注释的属性必须大于等于其value值;
@Max:被注释的属性必须小于等于其value值;
@Size:被注释的属性必须在其min和max值之间;
@Pattern:被注释的属性必须符合其regexp所定义的正则表达式;
@NotBlank:被注释的字符串不能为空字符串;
@NotEmpty:被注释的属性不能为空;
@Email:被注释的属性必须符合邮箱格式。
实例
/**
* 参数校验测试参数
*/
public class TestParame {
@NotEmpty(message = "名称不能为空")
private String name;
@Min(value = 0, message = "排序最小为0")
private Integer sort;
@FlagValidator(value = {"0","1"}, message = "显示状态不正确")
private Integer showStatus;
}
/**
* HibernateValidator错误结果处理切面(返回统一处理结果)
* Create By lwj 2020.6.28
*/
@Aspect
@Component
@Order(2)
public class HibernateValidatorAspect {
@Pointcut("execution(public * com.mbl.base.modular.*.controller.*.*(..))")
public void BindingResult() {
}
@Around("BindingResult()")
public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
Object[] args = joinPoint.getArgs();
for (Object arg : args) {
if (arg instanceof BindingResult) {
BindingResult result = (BindingResult) arg;
if (result.hasErrors()) {
FieldError fieldError = result.getFieldError();
if(fieldError!=null){
return MR.err(400, fieldError.getDefaultMessage());
}else{
return MR.err(500, "网络异常!");
}
}
}
}
return joinPoint.proceed();
}
}
@ApiOperation(value = "参数测试")
@RequestMapping(value = "/test", method = RequestMethod.POST)
@ResponseBody
public CommonResult test(@Validated @RequestBody TestParame testParame, BindingResult result) {
// 如果不加 BindingResult 参数,则如果参数校验失败不会进入该方法体
// 如果拥有 BindingResult 参数,则BindingResult参数会带着校验结果执行方法体(需要自行进行参数校验结果处理)
return result;
}