當控制器中的所有請求映射與傳入請求不匹配時會發生什麼?我正在使用捕獲Exception.class的異常處理程序,但似乎沒有捕獲它?誰能解釋一下?Spring MVC在沒有請求映射時如何處理異常?
1
A
回答
1
根據documentation@ExceptionHandler
處理控制器執行期間發生的意外異常。在傳入請求不匹配任何請求映射的情況下,控制器方法甚至不會被執行。
基於Servlet技術的Spring-MVC。所有傳入請求將由DispatcherServlet
(在web.xml
中註冊)處理。 DispatcherServlet
查找可處理當前請求的處理程序。如果沒有找到適當的處理程序(即沒有找到適當的映射控制器的方法),DispatcherServlet
將啓動404錯誤。 發生錯誤時,Web容器(Tomcat或任何其他servlet容器)會生成一個包含異常消息的默認頁面。但是你也可以指定容器應該爲給定的異常返回一個特定的錯誤頁面。對於處理此錯誤手動你應該加入到web.xml
新error-page
元素,將讓你的錯誤代碼映射到網址:
...
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<error-page>
<error-code>404</error-code>
<location>/page-not-found</location>
</error-page>
...
因爲location
將被Spring-MVC將照常處理要求,您可以創建控制器來處理這個請求:
@Controller
public class ExceptionController{
@RequestMapping("/page-not-found")
public ModelAndView pageNotFound(){
return new ModelAndView("page-not-found");
}
}
現在只需創建名稱爲page-not-found.jsp
的視圖,並根據需要顯示異常信息。
相關問題
- 1. 如何在由同一個Spring MVC映射處理程序處理的兩個請求映射之間切換?
- 2. Spring MVC-異步請求處理
- 3. Spring MVC,如何讓控制器處理程序處理映射處理程序之前的所有請求?
- 4. Tiles 2並沒有找到URI的HTTP請求映射 - Spring-MVC
- 5. 沒有爲HTTP請求找到映射(Spring MVC)
- 6. Tomcat和Spring MVC-沒有找到HTTP請求的映射URI
- 7. Spring Mvc動態請求映射
- 8. Spring MVC 3全局請求映射
- 9. Spring MVC請求映射衝突
- 10. Spring MVC的請求映射約定
- 11. Spring MVC FlashMap和RedirectAttributes請求映射
- 12. Spring 3 MVC嵌套請求映射
- 13. Spring MVC請求映射挑戰
- 14. Spring MVC中的請求映射
- 15. 的Spring MVC請求映射編程
- 16. Spring MVC:用於請求映射的CoC
- 17. 在處理請求時發生異常
- 18. 如何在Spring MVC中定義請求映射的優先級?
- 19. Spring MVC - 如何在請求映射中傳遞HashMap
- 20. Spring MVC處理程序映射測試
- 21. Python請求異常處理
- 22. 在Spring MVC中處理JWT異常
- 23. Spring REST請求映射
- 24. Spring Web Flow請求映射
- 25. 問題與捲曲GET請求和Spring MVC請求映射
- 26. Spring MVC請求映射 - 完整請求URI
- 27. Spring MVC請求映射傳遞不應該傳遞的請求
- 28. 最佳的處理PageNotFound未映射的請求映射
- 29. nhibernate說'映射異常未處理'沒有persister爲:MyNH.Domain.User
- 30. 在春天的請求映射mvc
如果你有兩個映射,一個用於root'/',另一個用於'/ api',它會做最接近的匹配。只有API會被/ api處理,但是/和其他人會匹配我相信的根。然後,你可以處理任何你喜歡它/。你有沒有嘗試過 ? – bhantol
是的,目前它正在做一個GET請求,但因爲沒有映射(所有都是POST請求映射)我想知道如何捕獲錯誤/異常(無論是將它導向到HTTP 400頁面)而不是請求映射GET –
如果我正確理解你。如果出現未映射的請求,則結果將是一個包含404狀態碼的頁面。也許你沒有正確實現你的處理程序。如果你的項目包含web.xml,你可以使用''標籤來配置它;如果它基於註釋配置視圖相關的帖子:http://stackoverflow.com/questions/13356549/handle-error-404-with-spring-controller,如果你使用的是spring引導,定義bean'EmbeddedServletContainerCustomizer'並且在那裏配置錯誤頁面,您將在控制器中處理。 –
GVArt