springboot中,可以使用org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer类来统一的处理异常页面,使用方法如下:
1.添加异常页面:
2.自定义错误页面(实现EmbeddedServletContainerCustomizer接口)
//@Configuration(todo:这里为什么加了注释无效,不加反而生效呢) public class ErrorPageConfig{ @Bean public EmbeddedServletContainerCustomizer embeddedServletContainerCustomizer() { return new EmbeddedServletContainerCustomizer() { @Override public void customize(ConfigurableEmbeddedServletContainer container) { ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/error/401.html"); ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/error/404.html"); ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error/500.html"); container.addErrorPages(error401Page, error404Page, error500Page); } }; } }
到这里配置就可以生效了。
3.还可以写一个error页面的controller来统一处理异常页面的跳转,需要将上面的配置类改成如下:
@Configuration public class ErrorPageConfig implements EmbeddedServletContainerCustomizer{ @Override public void customize(ConfigurableEmbeddedServletContainer container) { container.addErrorPages(new ErrorPage(HttpStatus.BAD_REQUEST, "/error/400")); container.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error/500")); container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/error/404")); } }
其实就是不直接返回页面,而是用controller返回ModelAndView来进行页面跳转,这里controller就不写了。