全局异常处理

ErrorMvcAutoConfiguration是Springboot默认的异常处理配置

全局异常处理      若想更改异常页面的显示,可以写一个类实现ErrorPageRegistrar接口,添加发生某类异常时显示的页面。

 

项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护的工作量也很大。 将所有类型的异常处理从各处理过程解耦出来,这样既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护。使用统一异常处理的好处是能够将异常信息统一捕捉并组装成固定格式的数据返回。

Spring MVC处理异常有3种方式

(1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver;

(2)实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器;

(3)使用@ExceptionHandler注解实现异常处理; (cbop项目中使用此方式,所有需要统一异常处理的API都继承BaseAPI类。这个注解的功能是:自动捕获当前controller层出现的指定类型异常,并对该异常进行相应的异常处理)

注解的value属性可以指定异常类型

@ControllerAdvice

更好的实现:(不需要每个controller去继承)

在spring 3.2中,新增了@ControllerAdvice注解,可以用于定义@ExceptionHandler、@InitBinder、@ModelAttribute,并应用到所有@RequestMapping中

【注】如果全部异常处理返回json,那么可以使用 @RestControllerAdvice 代替 @ControllerAdvice ,这样在方法上就可以不需要添加 @ResponseBody。

比如下面这个代码实现:

@ControllerAdvice
public class CommonExceptionHandler {
        
    //可以指定异常类型,写多个这样的方法
    @ResponseBody
    @ExceptionHandler
    public String excepHandler(Exception e){
        return "CommonHandler:"+e;
    }
}