Spring Boot Web Error Page處理

大招至勝發表於2017-03-03

Spring Boot預設是whitelabel error page. 其實我們可以自己處理,由於時間有限,所以就簡單說明一下方法。

首先配置

@Configuration
public class ErrorPageConfig  {
    @Bean
    public EmbeddedServletContainerCustomizer containerCustomizer() {
        return new EmbeddedServletContainerCustomizer() {
            public void customize(ConfigurableEmbeddedServletContainer container) {
                ErrorPage error400Page = new ErrorPage(HttpStatus.BAD_REQUEST, "/400.html");
                ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/401.html");
                ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/404/");
                ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500.html");

                container.addErrorPages(error400Page, error401Page, error404Page, error500Page);
            }
        };
    }
}

細心的朋友會看到,404不是html, 這兒為了掩飾,所以用了兩種方法,如果是html的方法,需要將html檔案放到resources/static目錄下。404處理方式,就需要我們自己處理/404請求,與一般的Controller中處理Request類似。如下:

@RequestMapping("404")
    public String error404() {
        return "error404";
    }

用到了模版,所以需要在resources/templates目錄下建立error404.html檔案
其實配置的時候,也可以用繼承的方式:

@Configuration
public class ErrorPageConfig implements EmbeddedServletContainerCustomizer {

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {
        container.addErrorPages(
                new ErrorPage(HttpStatus.BAD_REQUEST, "/4O0.html"),
                new ErrorPage(HttpStatus.UNAUTHORIZED, "/4O1.html"),
                new ErrorPage(HttpStatus.NOT_FOUND, "/404/"),
                new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500.html")
        );
    }
}

關於異常的處理可以參看:http://blog.didispace.com/springbootexception/

相關文章