Spring boot – 控制器捕获所有URL
我正在构建一个Spring启动Web应用程序,并使用注释进行控制器/ URL映射。
我有几个带@RequestMapping
注释的控制器,其中url值设置(空字符串和特定URL),这些控制器工作正常,例如
@Controller @RequestMapping("/accounts") class SignInController { @Autowired PartyService partyService @RequestMapping(value="", method = RequestMethod.GET ) public String signinPage( Model model) {
导航到/ accounts会正确呈现登录页面。
但是,如果我添加一个没有RequestMapping
值的控制器,例如
@Controller class CustomController { @RequestMapping public String transform( Model model ) {
然后,我输入的任何与任何其他特定控制器都不匹配的URL将由此控制器处理(因此我希望404所有页面都只显示此页面)。 这是预期的行为吗? 我没想到这一点,并且由于RequestMapping值默认为空并且是一个antMatcher,我不会认为它会处理所有其他URL。
我有这个控制器没有定义RequestMapping
的原因是因为我想要一个SimpleUrlMappingHandler
定义一些明确的URL到那个控制器,如果我没有包含@Controller
和@RequestMapping
注释到那个控制器那么我得到一个关于无法找到处理程序方法的错误(可能问题是我误解了该实现细节)。
我的自定义控制器应该处理所有URL吗? 如果是这样,有什么我可以做的,所以它不会被只调用我定义的显式SimpleUrlMappingHandler
吗?
正如评论中所提到的 – 我刚刚从类中删除了@Controller
注释,然后在我的配置类中将控制器显式定义为@Bean
,并将其明确地分配给SimpleUrlMappingHandler
配置中的映射