2014-10-29 31 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配置