Spring Boot自定義錯誤頁面,Whitelabel Error Page處理方式

我已是Spring Framework框架的忠實粉絲。對於企業軟件開發者來講它提供了對常見問題的通用解決方案,包括那些你在將來開發中沒有意識到的問題。可是,它構建的J2EE項目變得比較臃腫,須要被一種新的解決方案替代。html

我最大的抱怨就是最開始使用Spring Framework構建項目十分緩慢和複雜,好比構建一個包含JPA的MVC應用。爲改變這種狀況,Spring Boot應運而生了。html5

Spring Boot以一種新的微服務的方式來替代以Spring Framework構建項目的傳統方式,我已經計劃在後續的項目開發中使用它。它已經幫咱們作了90%的工做,剩下10%的工做須要咱們本身去完成。對於我來講,自定義錯誤頁面就是其中之一。好比404錯誤,若是不處理的話,會出現「This application has no explicit mapping for /error, so you are seeing this as a fallback.」的錯誤信息,如圖所示:java

輸入圖片說明

Spring Boot默認使用嵌入式Tomcat,默認沒有頁面來處理404等常見錯誤。所以,爲了給用戶最佳的使用體驗,404等常見錯誤須要咱們自定義頁面來處理。git

咱們須要用org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer類來實現該功能,在Spring Boot的啓動類(main方法所在類)當中,添加以下代碼:github

@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);
   });
}

這是使用Java 8的lambda表達式來簡化實現的方式,在代碼中建立了三個ErrorPage實例來處理三個通用的HTTP錯誤狀態碼,並將他們添加到container當中。ErrorPage類是一個封裝了錯誤信息的類,它能夠在Jetty和Tomcat環境下使用。web

這是使用Java 7內部類的一個等價實現方式:spring

@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);
        }
    };
}

錯誤頁面須要放在Spring Boot web應用的static內容目錄下,它的默認位置是:src/main/resources/static,以下圖所示:app

輸入圖片說明

點擊連接下載圖中的三個文件的壓縮文件,這些文件使用 HTML5 Boilerplate製做。框架

如今,就能夠看到一個簡易版本的錯誤頁面,能夠根據本身的須要對它進行一些美化。ide

編譯自:http://www.sporcic.org/2014/05/custom-error-pages-with-spring-boot/

相關文章
相關標籤/搜索