2012-08-16 26 views
2

通常情況下,spring將爲路徑不匹配的請求映射返回404響應,如果路徑確實匹配但「Accept」頭不匹配,則返回406。如何查看請求路徑是否匹配,但是Accept沒有處理全部處理程序?

我有一個默認的控制器,作爲一個「全能」,通過返回Accept ed格式的錯誤來處理休息故障。控制器的形式爲:

@Controller 
public class DefaultController { 
    @RequestMapping("/**") 
    public void unmappedRequest(HtpServletRequest req) { 
     throw new ResourceNotFoundException(); 
    } 
} 

麻煩的是,如果我在這裏做得到一個比賽,我不能告訴,如果它在其他地方匹配。我想將正確的錯誤返回給客戶端,並告訴他們可以重試的Accept可用類型。目前我所能做的就是拋出一個普通的ResourceNotFound異常。

這是不是我可以在一個@Controller做還是我需要訴諸編寫某種過濾器鏈的這個?

FWIW我使用ReST exception handling pattern demonstrated by Stormpath

回答

1

我不認爲一個包羅萬象的控制器來處理「未映射的網址,」在所有的好辦法。

我會建議實施AbstractHandlerExceptionResolver的自定義實現,而不是依賴於Spring提供的默認實現。 doResolveException可以擴展到幾乎任何你想要的請求和響應。

如果你想這個自定義ExceptionResolver只適用於特定的控制器(REST控制器),你可以設置你想要的控制器列表的異常解析器mappedHandlerClasses。此外,您可以設置自定義異常解析器的順序,使其位於默認解析器之前。

如果您覺得我在這裏脫離主題,請告訴我。

相關問題