当找不到给定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
,因此DefaultController
。setOrder
方法定义了处理程序的优先级(顺序),从0开始。当然,某些默认的HandlerMapping
也必须定义为@Bean
。有关此类配置的更多信息,您可以在此处找到。
编辑@Tobia的一些想法:
您需要删除@RequestMapping
注释,以便RequestMappingHandlerMapping
不拾取控制器并实现AbstractController
接口以覆盖handleRequestInternal()
中的控制器的定义。