Spring 配置全局异常处理

方式一:@ControllerAdvice注解

使用注解方式AOP全局处理异常,配合@ExceptionHandler使用
@ControllerAdvice,是Spring3.2提供的新注解,是一个Controller增强器,可对controller中被 @RequestMapping标注的方法加一些逻辑处理。

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    @ResponseBody
    public ModelAndView exceptionHandler(Exception ex){
        ModelAndView mv = new ModelAndView(new MappingJackson2JsonView());
        mv.addObject("message",ex.getMessage());
        mv.addObject("code", HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        return mv;
    }
}
ExceptionHandler(value = Exception.class)==>ExceptionHandler(value = RuntimeException.class)
handleGlobalException(Exception ex)==>handleGlobalException(RuntimeException ex)
Runtime Exception 是 继承自 Exception的;
Runtime Exception 是 虚拟机正常运行时候的异常,是try catch有可能捕获不到的。
所以通常Exception,范围更大。

方式二:实现HandlerExceptionResolver接口

除了注解的方式以外,还可以实现HandlerExceptionResolver该异常处理器接口,重写resolveException方法,对异常进行处理。

1.写全局异常处理器实现类

@Component
public class GlobalExceptionHandler implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        ModelAndView mv = new ModelAndView(new MappingJackson2JsonView());
        mv.addObject("message",ex.getMessage());
        mv.addObject("code", HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        return mv;
    }
}

2.注册全局异常处理器

@Configuration
public class GlobalExceptionHandlerConfig implements WebMvcConfigurer {

    @Override
    public void configureHandlerExceptionResolvers(List resolvers) {
        resolvers.add(new GlobalExceptionHandler());
    }
}

你可能感兴趣的:(Spring,相关,spring,GlobalException)