[英]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()
方法返回一個@Controller
,它是您為給定映射定義的,所以DefaultController
。 setOrder
方法定義了處理程序的優先級(順序),從 0 開始。當然一些默認的HandlerMapping
必須定義為@Bean
。 您可以在此處找到有關此類配置的更多信息。
使用@Tobia 的一些想法進行編輯:
您需要刪除@RequestMapping
注釋,以便RequestMappingHandlerMapping
不會選擇控制器並實現AbstractController
接口以覆蓋handleRequestInternal()
的控制器定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.