@ControllerAdvice + @ExceptionHandler全局处理Controller层异常

欢迎光临我的博客[http://poetize.cn],前端使用Vue2,聊天室使用Vue3,后台使用Spring Boot

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

前言

Service抛出运行时异常时,我们的Controller层就不得不进行try-catch处理Service层的异常,否则会返回一些不友好的错误信息到客户端。但是,Controller层每个方法体都写一些模板化的try-catch的代码,很难看也难维护,特别是还需要对Service层的不同异常进行不同处理的时候。

1.简介

优点:将 Controller层的异常和数据校验的异常进行统一处理,减少模板代码,减少编码量,提升扩展性和可维护性。
缺点:只能处理Controller层未捕获(往外抛)的异常,对于 Interceptor(拦截器)层的异常,Spring 框架层的异常,就无能为力了。

  1. @ControllerAdvice是Controller的一个辅助类,用法基本是将其声明在某个bean上,然后在该bean的方法上使用其他的注解来指定不同的织入逻辑。
  2. @ExceptionHandler的作用主要在于声明一个或多个类型的异常,当符合条件的Controller抛出这些异常之后将会对这些异常进行捕获,然后按照其标注的方法的逻辑进行处理,从而改变返回的视图信息。

2.基本使用

@ControllerAdvice(basePackages = "sell")
public class SpringControllerAdvice {
  @ExceptionHandler(RuntimeException.class)
  @ResponseStatus(HttpStatus.FORBIDDEN)    //设置状态码
  public ModelAndView runtimeException(RuntimeException e) {
    e.printStackTrace();
    return new ModelAndView("common/error");
  }
}
posted @ 2019-08-07 13:35  LittleDonkey  阅读(309)  评论(0编辑  收藏  举报