如何在 Spring Boot 2 中定义默认处理程序

How to define a default handler in Spring Boot 2

我如何定义一个默认处理程序或控制器操作,当没有为给定的 URL 找到其他处理程序时将调用它?

我尝试使用包罗万象的模式 /**(语法是 Kotlin):

@Controller
class DefaultController {

    @RequestMapping("/**")
    fun default(...) {
        ...
    }
}

但这与 比 Spring 自己的处理程序更高的优先级相匹配, 例如 spring.mvc.static-path-pattern 中配置的静态文件路径不再可用.我需要我的默认处理程序具有最低优先级。

您必须添加 HandlerMapping 的实现并将其添加到处理程序列表中。您还需要指定处理请求的处理程序的顺序:

@Bean
public SimpleUrlHandlerMapping simpleUrlHandlerMapping() {
    SimpleUrlHandlerMapping simpleUrlHandlerMapping
      = new SimpleUrlHandlerMapping();
    Map<String, Object> urlMap = new HashMap<>();
    urlMap.put("/**", defaultController());
    simpleUrlHandlerMapping.setUrlMap(urlMap);
    simpleUrlHandlerMapping.setOrder(1);
    return simpleUrlHandlerMapping;
}

此处是您为给定映射定义的 defaultController() 方法 returns 和 @Controller,因此 DefaultControllersetOrder 方法定义了处理程序的优先级(顺序),从 0 开始。当然一些默认的 HandlerMapping 也必须定义为 @Bean。有关此类配置的更多信息,您可以找到 here.

根据@Tobia 的一些想法进行编辑:

你需要删除@RequestMapping注解,这样控制器就不会被RequestMappingHandlerMapping拾取,并实现AbstractController接口来覆盖[=21=中控制器的定义].