注解校验

发布时间 2023-06-18 21:05:47作者: france水

自定义注解

@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)

使用指定分组后未添加分组的校验不生效