2014-10-29 59 views
2

我正在構建一個Spring引導Web應用程序,並使用控制器/ URL映射的註釋。Spring引導 - 控制器捕獲所有URL

我有幾個控制器用@RequestMapping進行了註釋,並設置了可正常工作的url值(包括空字符串和特定的URL)。

@Controller 
@RequestMapping("/accounts") 
class SignInController { 

    @Autowired PartyService partyService 

    @RequestMapping(value="", method = RequestMethod.GET) 
    public String signinPage(Model model) { 

導航到/帳戶正確呈現登錄頁面。

但是,如果我添加一個沒有RequestMapping值的控制器,例如,

@Controller 
class CustomController { 

    @RequestMapping 
    public String transform(Model model) { 

然後我輸入任何網址不符合任何其他特定控制器得到該控制器處理(頁左右我會希望所有404只renderthis頁)。這是預期的行爲?我沒想到會這樣,並且由於RequestMapping值默認爲空,並且是一個antMatcher,我不會認爲它會處理所有其他URL。

我之所以有這個控制器出RequestMapping定義是因爲我想也有SimpleUrlMappingHandler有一些明確的網址去那個控制器進行定義,如果我不包括@Controller & @RequestMapping註釋到控制器的話,我得到一個關於無法找到處理程序方法的錯誤(也許問題是我誤解了它的實現細節)。

我的自定義控制器是否應該處理所有的URL?如果是這樣,有什麼我可以做,所以它不,只有被調用我已經定義的顯式SimpleUrlMappingHandler

+0

如果你想映射一個'SimpleUrlHandlerMapping'然後不使用'@ Controller',因爲這是用於別的。改爲實現這些控制器的'Controller'接口。 – 2014-10-29 15:04:46

+0

好的,將嘗試 - 我的印象是@Controller只是註釋了該類作爲類路徑掃描的「控制器」類型組件(假設沒有,我將需要在配置中顯式定義控制器) - 該控制器是否攔截所有其他網址的預期行爲? – rhinds 2014-10-29 15:07:07

+1

確實如此,然而'RequestMappingHandlerMapping'檢測到所有的'@ Controller'並且試圖找到所有'@ RequestMapping'註解的方法。 – 2014-10-29 15:16:43

回答

1

正如在評論中提到的 - 我只是刪除從類的@Controller註釋,然後明確定義控制器爲我的配置類@Bean並明確分配,要在SimpleUrlMappingHandler配置