2015-01-27 3 views
1

У меня есть приложение Spring Boot, работающее в автономном контейнере Tomcat. Я медленно продвигаюсь к работе с глобальной обработкой ошибок (пользовательские 404 страницы и т. Д.), А класс ErrorPageFilter теперь поймать ошибку, но она бросает NullPointerException, пытаясь переслать запрос на ErrorPage.Spring Boot - ErrorPageFilter не может найти RequestDispatcher

Трассировка стека выглядит следующим образом:

java.lang.NullPointerException 
    org.springframework.boot.context.web.ErrorPageFilter.handleErrorStatus(ErrorPageFilter.java:141) 
    org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:112) 
    org.springframework.boot.context.web.ErrorPageFilter.access$000(ErrorPageFilter.java:59) 
    org.springframework.boot.context.web.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:88) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    org.springframework.boot.context.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:101) 

Глядя на источник ErrorPageFilter по версии у меня есть, это не удается, пытаясь соответствовать RequestDispatcher для пути ошибки:

private void handleErrorStatus(HttpServletRequest request, 
    HttpServletResponse response, int status, String message) 
    throws ServletException, IOException { 

if (response.isCommitted()) { 
    handleCommittedResponse(request, null); 
    return; 
} 

String errorPath = getErrorPath(this.statuses, status); 
if (errorPath == null) { 
    response.sendError(status, message); 
    return; 
} 
response.setStatus(status); 
setErrorAttributes(request, status, message); 
request.getRequestDispatcher(errorPath).forward(request, response); 

(последняя строка является NPE)

Я настроил свою обработку ошибок следующим образом: config:

@Configuration 
class ErrorConfiguration implements EmbeddedServletContainerCustomizer { 

    @Override public void customize(ConfigurableEmbeddedServletContainer container) { 
     container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/errors/404")) 
     container.addErrorPages(new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/errors/500")) 
    } 
} 

который, кажется, хорошо - те страницы ошибок регистрируются и ErrorPageFilter ногами в

Я попытался регистрируя путь «/ ошибки/404», как и стандартный вид-контроллер и как. @Controller сопоставление запросов (также обратите внимание, если я просто перейду непосредственно к/errors/404 в браузере, адрес будет удален, и страница будет отображаться)

Может ли кто-нибудь пролить свет на это?

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^