Spring Bootカスタムエラーページ

5449 ワード

Spring Bootを使用して構築されたWEBアプリケーションはjarパッケージとして簡単にパブリッシュできますし、warパッケージとしてアプリケーションサーバにパブリッシュできます.カスタムエラーページは、この2つのパブリケーションで異なります.
JArパッケージのカスタムエラーページ
Spring Bootプロジェクトを作成します.デフォルトのパッケージはjarで、内部にはtomcatなどのservletコンテナが埋め込まれています.
最も簡単な方法はresources/templatesディレクトリの下でerror.htmlページを直接作成することであり、存在しない画面にアクセスすると直接この画面に入ります.



    
    Title


    sorry, system exception


2つ目の方法は、ErrorPageRegistrarインタフェースを実装し、特定の例外のURLパスを定義することです.
import org.springframework.boot.web.servlet.ErrorPage;
import org.springframework.boot.web.servlet.ErrorPageRegistrar;
import org.springframework.boot.web.servlet.ErrorPageRegistry;
import org.springframework.http.HttpStatus;

public class MyErrorPageRegistrar implements ErrorPageRegistrar {
    @Override
    public void registerErrorPages(ErrorPageRegistry errorPageRegistry) {
        ErrorPage page404 = new ErrorPage(HttpStatus.NOT_FOUND, "/404");
        ErrorPage page500 = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500");

        errorPageRegistry.addErrorPages(page404, page500);
    }
}
次に、構成クラスでBeanを宣言します.
    @Bean
    public ErrorPageRegistrar errorPageRegistrar(){
        return new MyErrorPageRegistrar();
    }
コントローラに404と500を追加します.
    /**
     * 404 error
     * @return
     */
    @RequestMapping("/404")
    public String error404() {
        return "commons/404";
    }

    /**
     * 500 error
     * @return
     */
    @RequestMapping("/500")
    public String error500() {
        return "commons/500";
    }
resources/templaes/commonsディレクトリの下に404.htmlと500.htmlを作成すればいいです.
warパッケージのカスタムエラーページ
Spring Bootはwarパッケージとしてtomcatに公開され、まず以下のように構成する必要があります.
  • Spring Bootエントリクラスをorg.springframework.boot.web.support.SpringBootServiceletInitializerクラス
  • に継承
    @SpringBootApplication
    @EnableTransactionManagement
    public class HelloApplication extends SpringBootServletInitializer {
    
     @Override
     protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
         return application.sources(HelloApplication.class);
     }
    
     public static void main(String[] args) {
         SpringApplication.run(HelloApplication.class, args);
     }
    }
    
  • pom.xmlのpackagingはwar
    war
    
  • に設定されている.
  • pom.xmlに属性start-classを追加し、Spring Bootエントリクラス
     
         UTF-8
         UTF-8
         1.8
         3.0.2.RELEASE
         2.1.1
         com.feng.hello.HelloApplication
     
    
  • に設定
  • pom.xmlでtomcatの依存scopeをprovided
         
             org.springframework.boot
             spring-boot-starter-tomcat
             provided
         
    
  • に設定
    このときパッケージング後に生成されたwarパケットはtomcatに公開できるが、404などのエラー画面のデフォルトはWhitelable Error pageであり、この方式は明らかに友好的ではなく、以下の手順でエラー画面をカスタマイズする.
  • Whitelabel error pageを最初に無効にします.アプリケーション.propertiesに
    server.error.whitelabel.enabled=false
    
  • を追加します.
  • 定義error.html,404.html,500.htmlなどのエラー画面
    
    
    
        
        
            function toIndex(){
                window.location.href = ctx + "/index";
            }
        
    
    
    

    Sorry, page not found

    Go Home
    1. 创建Controller实现 org.springframework.boot.autoconfigure.web.ErrorController 接口

      @Controller
      public class AppErrorController implements ErrorController {
      
          @Override
          public String getErrorPath() {
              return "/error";
          }
      
          @RequestMapping("/error")
          public String handleError(HttpServletRequest request) {
              Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
      
              if (status != null) {
                  Integer statusCode = Integer.valueOf(status.toString());
      
                  if (statusCode == HttpStatus.NOT_FOUND.value()) {
                      return "commons/404";
                  } else if (statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) {
                      return "commons/500";
                  }
              }
              return "commons/error";
          }
      }
      
    2. このとき、存在しない画面にアクセスすると、カスタマイズした画面が表示されます.
      バージョンの説明:
    3. Spring Boot 1.5.4.RELEASE
    4. Thymeleaf 3.0.2.RELEASE


    5. 参考:
      https://www.mkyong.com/spring-boot/spring-boot-deploy-war-file-to-tomcat/
      https://docs.spring.io/spring-boot/docs/1.5.6.RELEASE/reference/htmlsingle/#howto-create-a-deployable-war-file
      http://www.baeldung.com/spring-boot-custom-error-page
      https://docs.spring.io/spring-boot/docs/1.5.13.RELEASE/reference/htmlsingle/#boot-features-error-handling