0

SpringMvc(Springブートバージョン1.5.1)で無効なURLのカスタムエラーページを作成しようとしています。spring-bootのカスタマイズされた404エラーページ

spring.thymeleaf.cache=false 
server.error.whitelabel.enabled=false 
spring.mvc.throw-exception-if-no-handler-found=true 
spring.resources.add-mappings=false 

私の例外ハンドラがある

application.properties:

RestResponseEntityExceptionHandler.java

@ControllerAdvice 
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler { 

    public RestResponseEntityExceptionHandler() { 
     super(); 
    } 

    @Override 
    protected ResponseEntity<Object> handleNoHandlerFoundException(NoHandlerFoundException ex, 
     HttpHeaders headers, HttpStatus status, WebRequest request) { 
     logger.error("404 Status Code", ex); 
     final GenericResponse bodyOfResponse = new GenericResponse(messages.getMessage("No such page", null, request.getLocale()), "NoHandlerFound"); 
     return handleExceptionInternal(ex, bodyOfResponse, new HttpHeaders(), HttpStatus.NOT_FOUND, request); 
    } 
} 
を私が持っているデフォルトのホワイトレーベルのエラーページを無効にするには

これは原則として機能します。私はブラウザで無効なURLに行けば、私は次のようになりますJSONを取得:

{「メッセージ」:「いいえ、そのようなページ」、「エラー」:「NoHandlerFound」}

代わりにJSONレスポンスの適切なHTMLビューを表示したいです(ホワイトリストのページに似ています)。これは "メッセージ"文字列を置き換えることができるテンプレートでなければなりません。このビューをレンダリングするにはどうしたらいいですか?

答えて

6

スプリングブート& Spring MVCを使用すると、resources/publicの下にエラーフォルダを作成し、顧客エラーページを配置することができます。春はそれらを拾うでしょう。

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

Spring MVCを使用していない場合は、独自のエラーページレジストラを実装してエラーページを登録する必要があります。

@Bean 
public ErrorPageRegistrar errorPageRegistrar(){ 
    return new MyErrorPageRegistrar(); 
} 

private static class MyErrorPageRegistrar implements ErrorPageRegistrar { 

    // Register your error pages and url paths. 
    @Override 
    public void registerErrorPages(ErrorPageRegistry registry) { 
     registry.addErrorPages(new ErrorPage(HttpStatus.BAD_REQUEST, "/400")); 
    } 

} 

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-error-handling-custom-error-pages

+0

私はthymeleafで春のMVCを使用して、資源/テンプレート/中とで/に/リソース/公共/エラーerror.htmlと404.htmlページを入れてみましたAM /リソース/テンプレート/エラー/明らかに彼らは見つけることができません。この仕事をするために必要なことは他にありますか? – user1583209

+1

プロパティファイルからserver.error.whitelabel.enabled = falseを削除します。 – jmw5598

+0

それはうまくいった。今、私は、ビューにリクエストURLを取得する方法を理解する必要があります。 – user1583209

関連する問題