Springboot整合hibernate validator 全局异常处理

第一步:依赖

<!--数据有效性校验-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

第二步:配置文件

@Configuration
public class HibernateValidatorConfig {
    @Bean
    public static Validator validator() {
        return Validation.byProvider(HibernateValidator.class)
                .configure()
                // 开启快速校验(不校验所有参数,只要出现校验失败情况直接返回,不再进行后续参数校验),默认校验所有参数,false校验全部
                .failFast(true)
                .buildValidatorFactory()
                .getValidator();
    }
}

第三步:全局异常处理

@RestControllerAdvice
public class GlobalExceptionHandler {
    /**
     * Hibernate validator 参数校验异常
     *
     * @param ex
     * @return
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResultBean<String> validationErrorHandler(MethodArgumentNotValidException ex) {
        // 同样是获取BindingResult对象,然后获取其中的错误信息
        // 如果前面开启了fail_fast,事实上这里只会有一个信息
        //如果没有,则可能又多个
        List<String> errorInformation = ex.getBindingResult().getAllErrors()
                .stream()
                .map(ObjectError::getDefaultMessage)
                .collect(Collectors.toList());
        return ResultBeanUtil.error("").setMsg(errorInformation.toString());
    }
}

第四步:

@Getter
@Setter
@ToString
public class AdminLoginDTO {
    @NotBlank(message = "账户不能为空")
    @Size(min = 6, max = 32)
    private String account;

    @NotBlank(message = "密码不能为空")
    @Size(min = 6, max = 32)
    private String password;
}

第五步:

@PostMapping("/v1/login")
public ResultBean<SaTokenInfo> login(@RequestBody @Valid AdminLoginDTO adminLoginDTO) {

}

你可能感兴趣的:(SpringBoot,spring,boot,hibernate,validator,校验)