2011-02-15 49 views
4

基本上,使用Spring MVC,我試圖創建一個路由器控制器,將採取任何URL尚未被另一個控制器處理,並將其路由到其各自的資源或轉發搜索請求如果沒有資源可以找到。 使用@RequestMapping(value="/{qry}", method = RequestMethod.GET)成功地獲取了我的其他控制器尚未抓取的請求(這似乎是通過首先檢查最具體的映射工作),然後我可以做任何我需要的轉發。然而,只要我在請求中加入「/」,映射就會中斷並返回一個404.春天mvc默認映射處理程序

換句話說,"/some-long-path-or-something"正確映射到這個全捕獲控制器,但是"/some/other/path"(它不映射到任何其他控制器)都不會被我的全部抓住。

這是如何實現的?我已經閱讀了有關攔截器和默認處理程序的一些內容,但沒有找到解決方案的運氣。

感謝您的任何建議!

回答

5

開箱即用的,Spring會自動註冊一個DefaultAnnotationHandlerMapping bean,它使用註釋將請求匹配到控制器。在大多數情況下,其默認行爲都很好。

如果您在上下文中聲明瞭自己的DefaultAnnotationHandlerMapping,那麼它將覆蓋默認值,並允許您設置其defaultHandler屬性,該屬性將在沒有顯式處理程序匹配時使用。只需將「全部控制器」控制器注入該屬性,然後將Bob的「你的叔叔」。

3

爲什麼不抓住404s並相應處理?如果我沒有弄錯,我想這就是你想要完成的。

你可以把這個在你的web.xml處理404:這裏

<error-page> 
    <error-code>404</error-code> 
    <location>/yourHandlerPage</location> 
</error-page> 

我缺少的東西?

+0

我正在考慮使用這種方法,但是這會創建一個重定向或轉發?此外,我假設原始請求信息以某種方式發送到錯誤頁面,對吧? – jerluc 2011-02-15 19:48:57

+0

我還沒有測試過這個,但是根據我讀的一篇文檔,似乎請求被轉發,而不是重定向,這就是你想要的:`一個錯誤頁面元素定義了一個資源來處理特定類型的錯誤。每個錯誤頁面元素都包含一個錯誤代碼元素和一個位置元素。錯誤代碼定義了元素處理的HTTP錯誤代碼。位置元素定義了將請求轉發到的路徑。該位置可以是容器可訪問的任何資源,包括上下文中的靜態文件,遠程HTTP資源或容器內的另一個servlet。# – limc 2011-02-15 19:56:54

相關問題