自定义全局异常处理
这里需要我们创建一个全局异常处理类,并添加@ControllerAdvice注解,在类中实现异常的处理方法,方法可以使用 @ExceptionHandler来标注所拦截的异常
/**
* 自定义统一异常处理
*/
@Slf4j
@ControllerAdvice //拦截有 @Controller 的类
public class ControllerExceptionHandle {
/**
* 异常处理方法
* @ExceptionHandler() 标注方法用于异常处理
* value = {Exception.class} 拦截异常为Exception级别的异常
* @param request
* @param e
* @return
*/
@ExceptionHandler(value = {Exception.class})
public ModelAndView exceptionHandle(HttpServletRequest request,Exception e) throws Exception {
log.error("RequestURL:{},Exception:{}",request.getRequestURL(),e);
//如果注解存在,那么将异常抛出(因为已经定义了异常的处理)
if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class)!=null){
throw e;
}
//这里先判断拦截到的Exception是不是我们自定义的异常类型
// if(e instanceof NotFoundExcept){
// NotFoundExcept notFoundExcept = (NotFoundExcept) e;
// throw e;
// }
//若所拦截的异常没有自定义处理,则默认返回到error界面
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("url",request.getRequestURL());
modelAndView.addObject("exception",e);
modelAndView.setViewName("error/error");
return modelAndView;
}
}