Spring Boot自定义错误页面,Whitelabel Error Page处理方式
2017-12-22 16:05
1096 查看
我已经是Spring Framework框架的忠实粉丝。对于企业软件开发者来说它提供了对常见问题的通用解决方案,包括那些你在未来开发中没有意识到的问题。但是,它构建的J2EE项目变得比较臃肿,需要被一种新的解决方案替代。
我最大的抱怨就是最开始使用Spring Framework构建项目十分缓慢和复杂,比如构建一个包含JPA的MVC应用。为改变这种情况,Spring Boot应运而生了。
Spring Boot以一种新的微服务的方式来替代以Spring Framework构建项目的传统方式,我已经计划在后续的项目开发中使用它。它已经帮我们做了90%的工作,剩下10%的工作需要我们自己去完成。对于我来说,自定义错误页面就是其中之一。比如404错误,如果不处理的话,会出现“This application has no explicit mapping for /error, so you are seeing this as a fallback.”的错误信息,如图所示:
Spring Boot默认使用嵌入式Tomcat,默认没有页面来处理404等常见错误。因此,为了给用户最佳的使用体验,404等常见错误需要我们自定义页面来处理。
我们需要用org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer类来实现该功能,在Spring Boot的启动类(main方法所在类)当中,添加如下代码:
2
3
4
5
6
7
8
9
10
11
这是使用Java 8的lambda表达式来简化实现的方式,在代码中创建了三个ErrorPage实例来处理三个通用的HTTP错误状态码,并将他们添加到container当中。ErrorPage类是一个封装了错误信息的类,它可以在Jetty和Tomcat环境下使用。
这是使用Java 7内部类的一个等价实现方式:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
错误页面需要放在Spring Boot web应用的static内容目录下,它的默认位置是:src/main/resources/static,如下图所示:
点击链接下载图中的三个文件的压缩文件,这些文件使用 HTML5
Boilerplate制作。
现在,就可以看到一个简易版本的错误页面,可以根据自己的需要对它进行一些美化。
编译自:http://www.sporcic.org/2014/05/custom-error-pages-with-spring-boot/。
我最大的抱怨就是最开始使用Spring Framework构建项目十分缓慢和复杂,比如构建一个包含JPA的MVC应用。为改变这种情况,Spring Boot应运而生了。
Spring Boot以一种新的微服务的方式来替代以Spring Framework构建项目的传统方式,我已经计划在后续的项目开发中使用它。它已经帮我们做了90%的工作,剩下10%的工作需要我们自己去完成。对于我来说,自定义错误页面就是其中之一。比如404错误,如果不处理的话,会出现“This application has no explicit mapping for /error, so you are seeing this as a fallback.”的错误信息,如图所示:
Spring Boot默认使用嵌入式Tomcat,默认没有页面来处理404等常见错误。因此,为了给用户最佳的使用体验,404等常见错误需要我们自定义页面来处理。
我们需要用org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer类来实现该功能,在Spring Boot的启动类(main方法所在类)当中,添加如下代码:
@Bean public EmbeddedServletContainerCustomizer containerCustomizer() { return (container -> { ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/401.html"); ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"); ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500.html"); container.addErrorPages(error401Page, error404Page, error500Page); }); }1
2
3
4
5
6
7
8
9
10
11
这是使用Java 8的lambda表达式来简化实现的方式,在代码中创建了三个ErrorPage实例来处理三个通用的HTTP错误状态码,并将他们添加到container当中。ErrorPage类是一个封装了错误信息的类,它可以在Jetty和Tomcat环境下使用。
这是使用Java 7内部类的一个等价实现方式:
@Bean public EmbeddedServletContainerCustomizer containerCustomizer() { return new EmbeddedServletContainerCustomizer() { @Override public void customize(ConfigurableEmbeddedServletContainer container) { ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/401.html"); ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"); ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500.html"); container.addErrorPages(error401Page, error404Page, error500Page); } }; }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
错误页面需要放在Spring Boot web应用的static内容目录下,它的默认位置是:src/main/resources/static,如下图所示:
点击链接下载图中的三个文件的压缩文件,这些文件使用 HTML5
Boilerplate制作。
现在,就可以看到一个简易版本的错误页面,可以根据自己的需要对它进行一些美化。
编译自:http://www.sporcic.org/2014/05/custom-error-pages-with-spring-boot/。
相关文章推荐
- Spring Boot自定义错误页面,Whitelabel Error Page处理方式
- Spring Boot自定义错误页面,Whitelabel Error Page处理方式
- SpringBoot中jsp页面调用iframe标签报Whitelabel Error Page 错误
- Spring Boot自定义错误页面,Whitelabel Error Page处理方式
- springboot常见错误——Whitelabel Error Page
- java处理springboot whitelabel error page
- SpringBoot接口服务处理Whitelabel Error Page
- SpringBoot接口服务处理Whitelabel Error Page
- Spring boot JSP访问页面显示Whitelabel Error Page
- 《Springboot极简教程》问题解决:Springboot启动报错 Whitelabel Error Page: This application has no explicit mapping for
- SpringBoot 不显示Whitelabel Error Page
- Spring Boot : Whitelabel Error Page解决方案
- SpringBoot 访问出错Whitelabel Error Page
- springboot启动报错:whitelabel error page
- spring-boot集成 jsp报whitelabel error page的问题解决
- 初学 Spring boot 报错 Whitelabel Error Page 404
- Spring Boot Whitelabel Error Page解决办法
- spring boot 源码解析14-默认错误页面处理流程, 自定义,及EnableAutoConfigurationImportSelector处理
- spring-boot jsp whitelabel error page问题解决
- 《Springboot极简教程》问题解决:Springboot启动报错 Whitelabel Error Page: This application has no explicit mapping for(转)