2016-05-23 10 views
14

は、私は、カスタムエラーページを設定しようとしている、404のために例えば、私は自分のアプリケーションの設定に以下の豆を追加しました:春ブーツやカスタム404エラーページ私の春のブートアプリケーションで

また
@Bean 
public EmbeddedServletContainerCustomizer containerCustomizer() { 
    return new EmbeddedServletContainerCustomizer() { 
     @Override 
     public void customize(ConfigurableEmbeddedServletContainer container) { 
      container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html")); 
     } 
    }; 
} 

、私は次のような単純なThymeleafのテンプレート作成しました:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"> 
    <head> 
     <title>404 Not Found</title> 
     <meta charset="utf-8" /> 
    </head> 
    <body> 
     <h3>404 Not Found</h3> 
     <h1 th:text="${errorCode}">404</h1> 
     <p th:utext="${errorMessage}">Error java.lang.NullPointerException</p> 
     <a href="/" th:href="@{/}">Back to Home Page</a> 
    </body> 
</html> 

をして/resources/templates/フォルダにこれを追加しました。今404エラーで私は白い画面しか見ることができません。

私は間違っていますか、404ページを正しく設定するにはどうすればよいですか?また、カスタムエラーページの静的ページだけでなく、テンプレートも使用できますか? /404.htmlがないテンプレート名、をリダイレクトするURLパスを表していること

答えて

35

春ブート1.4.xのでは、custom error pageを追加することができます。

あなたが与えられたステータスコード用のカスタムHTMLエラーページを表示したい場合は、あなたが/errorフォルダにファイルを追加します。エラーページは静的なHTML(静的リソースフォルダのいずれかの下に追加されたもの)でも、テンプレートを使用して構築されたものでもかまいません。ファイルの名前は、正確なステータスコードまたはシリーズマスクでなければなりません。例えば

、静的なHTMLファイルに404をマッピングするために、フォルダ構造は次のようになります。

src/ 
+- main/ 
    +- java/ 
    | + <source code> 
    +- resources/ 
     +- public/ 
      +- error/ 
      | +- 404.html 
      +- <other public assets> 
+2

私は404.htmlを/ resources/errorの下にresources/public/errorの下に置いてみましたが、それでもまだSB 1.4でピックアップされていません。私は一般的な404メッセージを取得しています。任意のアイデアをトラブルシューティングする方法? –

+0

thx u made my day –

4

新にErrorPage(HttpStatus.NOT_FOUND、 "/404.html")

。 、テンプレートを使用することを主張しているので、あなたが/404.htmlを処理し、レンダリングコントローラを作成する必要があり、あなたの404.htmlsrc/main/resources/templatesに存在する:あなたはまた、これらを置き換えることができ

@Controller 
public class NotFoundController { 
    @RequestMapping("/404.html") 
    public String render404(Model model) { 
     // Add model attributes 
     return "404"; 
    } 
} 

だけでレンダリング-ERの ビューコントローラとコントローラーを表示します:

@Configuration 
public class WebConfig extends WebMvcConfigurerAdapter { 
    @Override 
    public void addViewControllers(ViewControllerRegistry registry) { 
     registry.addViewController("/404.html").setViewName("404"); 
    } 
} 

また、テンプレートと カスタムエラーページのためだけではなく、静的なページを使用することは可能でしょうか?

はい、可能です。しかし、見つからないページは通常静的で、テンプレートはの代わりに使用されます。プレーンな古いHTMLはそれほど意味をなさないでしょう。

+1

404ページにヘッダー/フッターコードを含める場合はどうすればよいですか? –

3

EmbeddedServletContainerCustomizer Beanの必要はありません。パブリックディレクトリに対応するエラーページ(404の場合は404.htmlなど)を置くだけで十分です(@ brunoidが指すように)。

error.htmlという汎用ページを配置して、アプリケーションでエラーまたは例外が発生したときに表示されるようにすることもできます。(Freemarkerの中)

単純な例は、 -

<html lang="en"> 
<head> 
</head> 
<body> 
    <div class="container"> 
     <div class="jumbotron alert-danger"> 
      <h1>Oops. Something went wrong</h1> 
      <h2>${status} ${error}</h2> 
     </div> 
    </div> 
</body> 

</html> 

これは、適切なエラーステータスと対応するエラーメッセージを表示します。また、Springブートを使用しているので、エラーページに表示されるステータスとエラーメッセージをいつでも上書きできます。

+0

"Freemarker"を拡張できますか? –

+0

Freemarker(http://freemarker.org)は、ビューテクノロジ(JSPやThymeleafなど)です。これを動作させるためにFreemarkerを使う必要はありません。 JSPを使用できます。 – Naiyer

+1

テンプレートを/ templates/error/folderに入れます。 – user482745

12

あなたはThymeleafを使用していますが、Thymeleafはコントローラなしでエラーを処理できます。
このthymeleafページについては がerror.html
として命名する必要があり、質問で提案されているようにあなたがThymeleafを使用している場合は、からのものと同様のテンプレートを使用することができsrc/main/resources > templates > error.html

Thymleaf error.html

+0

ブラウザにerror.htmlと書かれたAnyCodeが表示されます。 エラーの種類はすべてerror.html – GoutamS

+1

によって処理されます。また、Thymeleafがクラスパス上にあることを確認してください。 –

1

の下に配置する必要があります前回の返信は、FreemarkerではなくThymeleafに適していました。私はまた、スタイリングのためのブートストラップを追加しました:

<!DOCTYPE html> 
<html lang="en" 
     xmlns:th="http://www.thymeleaf.org"> 
<head> 
<title>Error Page</title> 
<link href="/webjars/bootstrap/3.3.7-1/css/bootstrap.min.css" rel="stylesheet" media="screen"/> 
<script src="/webjars/jquery/3.2.1/jquery.min.js"></script> 
<script src="/webjars/bootstrap/3.3.7-1/js/bootstrap.min.js"></script> 
</head> 
<body> 
<div class="container"> 
<div class="jumbotron alert-danger"> 
    <h1>Oops... something went wrong.</h1> 
    <h2 th:text="${status + ' ' + error}"></h2> 
</div> 
</div> 
</body> 
</html> 

あなたはerror.htmlというファイルにこのコードを配置し、あなたのthymeleafテンプレートのディレクトリに配置する必要があります。それを動作させるためにコントローラを追加する必要はありません。

0

Thymeleafはコントローラなしでエラーを処理できます。 リソースフォルダにerror.htmlを作成します。

関連する問題