簡體   English   中英

如何在 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()方法返回一個@Controller ,它是您為給定映射定義的,所以DefaultController setOrder方法定義了處理程序的優先級(順序),從 0 開始。當然一些默認的HandlerMapping必須定義為@Bean 您可以在此處找到有關此類配置的更多信息。

使用@Tobia 的一些想法進行編輯:

您需要刪除@RequestMapping注釋,以便RequestMappingHandlerMapping不會選擇控制器並實現AbstractController接口以覆蓋handleRequestInternal()的控制器定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM