2015-02-06 46 views
0

我試圖捕捉所有春天的MVC錯誤並顯示自定義錯誤頁面,以避免呈現本地Tomcat頁面。如何在沒有web.xml的情況下在DispatcherServlet上下文中捕獲Spring PageNotFound異常?

我與幾個@ExceptionHandler嘗試,如:

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

但404總是被轉換爲本地的Tomcat頁面(其他異常壓縮映像作品)。在@ControllerAdvice

我的異常處理程序請求不存在的URL時從不叫,我收到這樣的日誌消息:

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

如何避免從Spring上下文退回到本地Tomcat的錯誤頁面?

我的分發程序Servlet被映射到/(不/*

不,我不是拋出自定義異常 - 而不是請求映射的URL生成此異常喜歡/ knloqtnqklnwejlfnqw

回答

5

其實我通過診斷DispatcherServlet來源發現了確切的解決方案。我們需要爲調度程序servlet指定init-param:

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

因此,404是非常具體的情況。

+1

有沒有辦法在Java代碼中做到這一點?我的意思是通過使用「實現WebApplicationInitializer」的類? – zygimantus 2016-01-06 06:06:46

0

一種資源,未映射將始終在部署描述符處被拒絕,並且將爲web.xml。

  1. 您需要配置web.xml中把這些錯誤特定URL說/ 404
  2. 現在,您需要將這些網址映射到一個控制器,可以採取必要的行動。

How to configure custom errors in Spring MVC本文顯示如何做到這一點。

我希望這是你需要做的一切。

如果你想使用@ExceptionHandler類,你可以參考this article。但是我沒有覺得它很有說服力,但它仍然可以幫助你映射NOT_FOUND異常和控制器中的其他異常。

相關問題