我正在构建一个 Spring boot Web 应用程序,并使用注释进行 Controller /url 映射。
我有几个用 @RequestMapping
注释的 Controller ,并设置了 url 值(空字符串和特定 URL),这些 Controller 工作正常,例如
@Controller
@RequestMapping("/accounts")
class SignInController {
@Autowired PartyService partyService
@RequestMapping(value="", method = RequestMethod.GET )
public String signinPage( Model model) {
导航到/accounts 可以正确呈现登录页面。
但是,如果我添加一个没有 RequestMapping
值的 Controller ,例如
@Controller
class CustomController {
@RequestMapping
public String transform( Model model ) {
然后,我输入的任何与任何其他特定 Controller 不匹配的 URL 都会由该 Controller 处理(因此我期望 404 的页面都只渲染此页面)。这是预期的行为吗?我没想到会出现这种情况,并且由于 RequestMapping 值默认为空并且是一个 antMatcher,我不会认为它会处理所有其他 URL。
我这个 Controller 没有定义 RequestMapping
的原因是因为我还想定义一个 SimpleUrlMappingHandler
,其中包含一些指向该 Controller 的显式 URL,如果我不这样做不包含该 Controller 的 @Controller
和 @RequestMapping
注释,然后我收到一个关于无法找到处理程序方法的错误(也许问题是我有错误-了解其实现细节)。
我的自定义 Controller 应该处理所有 URL 吗?如果是这样,我可以做些什么,这样它就不会被调用,而只会被我定义的显式 SimpleUrlMappingHandler
调用吗?
最佳答案
正如评论中提到的 - 我刚刚从类中删除了 @Controller
注释,然后在我的配置类中将 Controller 显式定义为 @Bean
并显式将其分配给 SimpleUrlMappingHandler
配置中的映射
关于java - Spring boot - Controller 捕获所有 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26633601/