自定义注解
@NotBlank、@NotEmpty、@NotNull区别
- @NotNull:主要用在基本数据类型上(int,Integer,Double),不能为null,但是可以是空字符串
- @NotEmpty:主要用在集合类上,不能为空,而且长度必须大于0(" "," ");
- @NotBlank:用在字符串上
注解不生效的原因
-
实体类上必须要添加@Valid注解去校验
-
添加校验注解后还未生效可能是需要添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> <version>2.7.12</version> </dependency>
获得校验的结果
- 在实体类后面添加 BindingResult result
controller层统一处理
@Slf4j
@RestControllerAdvice("xxx")
public class ExecptionControllerAdvice {
/**
* 参数非法(效验参数)异常 MethodArgumentNotValidException
* @param e
* @return
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public R handleValidException(MethodArgumentNotValidException e) {
log.error("数据效验出现问题{},异常类型{}",e.getMessage(),e.getClass());
BindingResult bindingResult = e.getBindingResult();
Map<String,String> errMap = new HashMap<>();
bindingResult.getFieldErrors().forEach((fieldError) -> {
errMap.put(fieldError.getField(),fieldError.getDefaultMessage());
});
return R.error(BizCodeEnum.VAILD_EXCEPTION.getCode(),BizCodeEnum.VAILD_EXCEPTION.getMessage())
.put("data",errMap);
}
@ExceptionHandler(value = Throwable.class)
public R handleException(Throwable throwable) {
log.error("错误异常{}",throwable);
return R.error(BizCodeEnum.UNKNOW_EXCEPTION.getCode(),BizCodeEnum.UNKNOW_EXCEPTION.getMessage());
}
}
分组校验
添加分组接口AddGroup、UpdateGroup
public interface AddGroup {
}
public interface UpdateGroup {
}
注解指定分组
@NotBlank(groups = {AddGroup.class})
controller添加@Validated(AddGroup.class)
使用指定分组后未添加分组的校验不生效