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();
}
}
至此,完成