首页 > 技术文章 > SpringBoot全局异常处理

clion 2020-12-27 23:42 原文

SpringBoot全局异常处理

当程序发生运行时异常时,我们往往需要对其进行处理,但是过多的异常处理使程序看起来不是那么的优雅。

幸运的是SpringBoot提供了全局异常处理,使我们可以很方便的处理一些异常。

使用@RestControllerAdvice表明这是一个全局异常处理类

然后使用 @ExceptionHandler(异常类型.class)指定要处理的异常然后在方法的参数中接收异常,然后再方法中进行处理,注意小的异常要在大的异常上面,这与异常的捕获是一致的,如果说直接指定Exception异常,那么所有的异常都会进入这个处理方法中。注意这里发生异常时直接返回,就像是请求得到了响应,和进入controller中是一样的,而不是抛出500异常。

具体如下

@RestControllerAdvice
public class ExceptionControllerAdvice {
    @ExceptionHandler(APIException.class)
    public ResultVO apiExceptionHandler(APIException e) {
        return ResultVO.builder().code(ResultStatus.FAIL).msg(e.getMsg()).build();
    }

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResultVO methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) {
        ObjectError objectError = e.getBindingResult().getAllErrors().get(0);
        // 注意哦,这里传递的响应码枚举
        return ResultVO.builder().code(ResultStatus.FAIL).msg(objectError.getDefaultMessage()).build();
    }

    @ExceptionHandler(Exception.class)
    public ResultVO exceptionHandler(Exception e) {
        return ResultVO.builder().code(ResultStatus.FAIL).data(false).msg("服务器有问题了").build();
    }

}

至此,完成

推荐阅读