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



当找不到给定URL的其他处理程序时,如何定义默认处理程序或控制器操作?

我尝试使用catch-all模式 /**(语法是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()方法返回您为给定映射定义的@Controller,因此DefaultControllersetOrder方法定义了处理程序的优先级(顺序),从0开始。当然,某些默认的HandlerMapping也必须定义为@Bean。有关此类配置的更多信息,您可以在此处找到。

编辑@Tobia的一些想法:

您需要删除@RequestMapping注释,以便RequestMappingHandlerMapping不拾取控制器并实现AbstractController接口以覆盖handleRequestInternal()中的控制器的定义。

最新更新