0

我想在SpringMvc(Spring-boot版本1.5.1)中爲無效URL創建一個自定義錯誤頁面。在彈簧引導中定製404錯誤頁

爲了禁用默認的白色標籤的錯誤頁面,我有:

application.properties

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

我的異常處理程序是:

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

With Spring Boot & 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

我在使用Spring MVC與thymeleaf,並試圖把和的error.html頁面404.html在/資源/公/錯誤/中/資源/模板和/資源/模板/錯誤/但顯然他們無法找到。還有什麼需要做這項工作? – user1583209

+1

從您的屬性文件中刪除server.error.whitelabel.enabled = false。 – jmw5598

+0

工作。現在我只需要弄清楚如何將請求url導入到視圖中。 – user1583209