2015-02-06 1 views
0

모든 봄 MVC 오류를 포착하고 사용자 정의 오류 페이지를 표시하여 기본 Tomcat 페이지를 표시하지 않도록하려고합니다. 내가 좋아하는 몇 가지 @ExceptionHandler으로 시도하고 있었다web.xml이없는 DispatcherServlet 컨텍스트에서 Spring PageNotFound 예외를 catch하는 방법은 무엇입니까?

:

@ExceptionHandler(Exception.class) 
@ExceptionHandler(RuntimeException.class) 
@ExceptionHandler(Throwable.class) 

하지만 404는 항상 기본 톰캣 페이지 (다른 예외 mapings 작품)로 변환됩니다. @ControllerAdvice에서

내 예외 핸들러가 아닌 기존 URL을 요청하는 동안 호출하지 않으며, 내가 같은 로그 메시지가 나타납니다 않습니다 :

o.s.w.s.PageNotFound WARN - No mapping found for HTTP request with URI [/websandbox/asdas] in DispatcherServlet with name 'dispatcher' 

어떻게 기본 톰캣 오류 페이지에 스프링 컨텍스트에서 대체를 피하기 위해를?

내 디스패처 서블릿은 내가 정의 예외를 던지는 아니에요,

하지 / (안 /*)에 매핑 - 매핑되지 URL을 요청하는 동안이 예외가 생성/knloqtnqklnwejlfnqw

답변

5

실제로 나는 DispatcherServlet 소스를 진단하여 정확한 해결책을 발견했습니다. Dispatcher 서블릿에 init-param을 지정해야합니다.

<init-param> 
      <param-name>throwExceptionIfNoHandlerFound</param-name> 
      <param-value>true</param-value> 
</init-param> 

그래서 매우 구체적인 경우입니다.

+1

Java 코드에서이를 수행 할 수있는 방법이 있습니까? 나는'WebApplicationInitializer'를 구현 한 클래스를 사용하고 있습니까? – zygimantus

0

자원 등이 매핑되지 않으면 항상 배포 설명자에서 거부되고 web.xml이됩니다.

  1. 당신은 특정 URL에 이러한 오류를 던질은 web.xml을 구성해야합니다 당신이 필요한 조치를 취할 수있는 컨트롤러에 다음의 URL의 매핑 할 필요가 이제/404
  2. 을 말한다.

How to configure custom errors in Spring MVC이 문서에서는 어떻게 수행 할 수 있는지 보여줍니다.

나는 이것이 당신이해야하는 모든 일이되기를 바랍니다.

클래스에 @ExceptionHandler를 사용하려는 경우 this article을 참조 할 수 있습니다. 그러나 나는 그것을 매우 설득력있게 찾지 못했지만 여전히 컨트롤러에서 NOT_FOUND 예외와 다른 것들을 매핑하는 것을 도울 것입니다.

관련 문제