Springboot 统一异常处理

针对 404 其实 springmvc 提供了2种方式     404 是比较特殊的   

1.先设置dispatcherServlet

@Bean
public ServletRegistrationBean dispatcherRegistration(DispatcherServlet dispatcherServlet) {
ServletRegistrationBean registration = new ServletRegistrationBean(
dispatcherServlet);
dispatcherServlet.setThrowExceptionIfNoHandlerFound(true);
return registration;
}

2.再增加处理错误页面的handler,加上@ControllerAdvice 注解

@ControllerAdvice
public class GlobalControllerExceptionHandler {
public static final String DEFAULT_ERROR_VIEW = "pages/404";

@ExceptionHandler(value = NoHandlerFoundException.class)
public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
ModelAndView mav = new ModelAndView();
mav.addObject("exception", e);
mav.addObject("url", req.getRequestURL());
mav.setViewName(DEFAULT_ERROR_VIEW);
return mav;
}
}

针对上面这样的方法 存在一个弊端:会造成对js,css等资源的过滤,最好使用第二种方法

2. 集成ErrorController 

@Controller
public class MainsiteErrorController implements ErrorController {

private static final String ERROR_PATH = "/error";

@RequestMapping(value=ERROR_PATH)
public String handleError(){
return "pages/404";
}

@Override
public String getErrorPath() {
// TODO Auto-generated method stub
return ERROR_PATH;
}

}

推荐使用第二种