Spring-Boot 全局的异常处理主要使用注解 @ControllerAdvice 来完成~
如果单使用@ExceptionHandler
,只能在当前Controller中处理异常。但当配合@ControllerAdvice
一起使用的时候,就可以摆脱那个限制了。
他会拦截所有使用@Controller注解的类。
package com.favorites.comm.exception; import org.apache.catalina.servlet4preview.http.HttpServletRequest; import org.apache.log4j.Logger; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; @ControllerAdvice public class GlobalExceptionHandler { protected Logger logger = Logger.getLogger(this.getClass()); public static final String DEFAULT_ERROR_VIEW = "error"; @ExceptionHandler(value = Exception.class) @ResponseBody public ModelAndView defaultErrorHandler(Exception e, HttpServletRequest request) throws Exception { // 把异常结果通过日志 记录下来 logger.info("请求地址:" + request.getRequestURL()); logger.error("异常信息:",e); //如果需要把异常信息展示到页面 请使用addObject() ModelAndView mav = new ModelAndView(); mav.addObject("url", request.getRequestURL()); mav.addObject("Exception", e); mav.setViewName(DEFAULT_ERROR_VIEW); return mav;//返回对应的错误页面 } }