Springboot的全局异常

1. Springboot的全局异常查是通过两个注解@ControllerAdvice和@ExceptionHandler来实现的

@ControllerAdvice:增强型控制器,对于控制器的全局配置放在同一个位置,全局异常的注解,放在类上。

@ControllerAdvice默认只会处理controller层抛出的异常,如果需要处理service层的异常,需要定义一个自 定义的MyException来继承RuntimeException类,然后@ExceptionHandler(MyException)即可。

@ExceptionHandler:指明需要处理的异常类型以及子类。注解放在方法上面

@ControllerAdvice
public class GlobalExceptionHandler {
  /**
     * 定义要捕获的异常 可以多个 @ExceptionHandler({})
     *
     * @param request  request
     * @param e        exception
     * @param response response
     * @return 响应结果
     */
    @ExceptionHandler(CustomException.class)
    public ErrorResult customExceptionHandler(HttpServletRequest request, final Exception e, HttpServletResponse response) {
        response.setStatus(HttpStatus.BAD_REQUEST.value());
        CustomException exception = (CustomException) e;
        return new ErrorResult(exception.getCode(), exception.getMessage());
    }
 
    /**
     * 捕获  RuntimeException 异常
     * TODO  如果你觉得在一个 exceptionHandler 通过  if (e instanceof xxxException) 太麻烦
     * TODO  那么你还可以自己写多个不同的 exceptionHandler 处理不同异常
     *
     * @param request  request
     * @param e        exception
     * @param response response
     * @return 响应结果
     */
    @ExceptionHandler(RuntimeException.class)
    public ErrorResult runtimeExceptionHandler(HttpServletRequest request, final Exception e, HttpServletResponse response) {
        response.setStatus(HttpStatus.BAD_REQUEST.value());
        RuntimeException exception = (RuntimeException) e;
        return new ErrorResult(400, exception.getMessage());
    }
 }

 

上一篇:gitLab生成SSH私钥后上传代码及获取代码


下一篇:项目学习:gitlab中从主分支拉取到自己仓库的方法