Spring Bootカスタムエラーページ
5449 ワード
Spring Bootを使用して構築されたWEBアプリケーションはjarパッケージとして簡単にパブリッシュできますし、warパッケージとしてアプリケーションサーバにパブリッシュできます.カスタムエラーページは、この2つのパブリケーションで異なります.
JArパッケージのカスタムエラーページ
Spring Bootプロジェクトを作成します.デフォルトのパッケージはjarで、内部にはtomcatなどのservletコンテナが埋め込まれています.
最も簡単な方法はresources/templatesディレクトリの下でerror.htmlページを直接作成することであり、存在しない画面にアクセスすると直接この画面に入ります.
warパッケージのカスタムエラーページ
Spring Bootはwarパッケージとしてtomcatに公開され、まず以下のように構成する必要があります. Spring Bootエントリクラスをorg.springframework.boot.web.support.SpringBootServiceletInitializerクラス に継承 pom.xmlのpackagingはwar に設定されている. pom.xmlに属性start-classを追加し、Spring Bootエントリクラス に設定 pom.xmlでtomcatの依存scopeをprovided に設定
このときパッケージング後に生成されたwarパケットはtomcatに公開できるが、404などのエラー画面のデフォルトはWhitelable Error pageであり、この方式は明らかに友好的ではなく、以下の手順でエラー画面をカスタマイズする. Whitelabel error pageを最初に無効にします.アプリケーション.propertiesに を追加します.定義error.html,404.html,500.htmlなどのエラー画面
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に公開され、まず以下のように構成する必要があります.
@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);
}
}
war
UTF-8
UTF-8
1.8
3.0.2.RELEASE
2.1.1
com.feng.hello.HelloApplication
org.springframework.boot
spring-boot-starter-tomcat
provided
このときパッケージング後に生成されたwarパケットはtomcatに公開できるが、404などのエラー画面のデフォルトはWhitelable Error pageであり、この方式は明らかに友好的ではなく、以下の手順でエラー画面をカスタマイズする.
server.error.whitelabel.enabled=false
function toIndex(){ window.location.href = ctx + "/index"; } Sorry, page not found Go Home
-
创建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"; } }
このとき、存在しない画面にアクセスすると、カスタマイズした画面が表示されます. - Spring Boot 1.5.4.RELEASE
- Thymeleaf 3.0.2.RELEASE
バージョンの説明:
参考:
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