SpringBoot相容SpringMVC帶有.do字尾的請求

垚森發表於2024-09-07

背景

MVC框架請求的都是.do字尾,但controller控制層攔截的是沒有字尾的連結。如controller請求/111/222,當請求/111/222.do時,可以正常進入。當我們將存量一些舊工程(SpringMVC框架)升級到Springboot後,發現無法進入,此處我們針對這塊進行最絲滑的適配。

版本資訊

Springboot:2.7.17

方案

  • 1、請求方改造,將.do刪除---除非該系統呼叫者很少,或者介面很少的情況
  • 2、提供方改造,基於過濾器或者攔截器,攔截到.do後,重定向。--不推薦,所有do請求都會發生重定向
  • 3、提供方改造,相容.do請求---比較絲滑,推薦🌟🌟🌟🌟🌟

方案三詳解

yaml增加字尾功能

spring:
  mvc:
    pathmatch:
      matching-strategy: ant_path_matcher
      use-suffix-pattern: true

編碼側

/**
 * @author weipt
 * @description 受理.do請求,不發生302重定向
 * @date 2024/9/6 23:09
 */
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        configurer.mediaType(".do", MediaType.ALL);
    }
}

自測

  • 後端寫個controller,攔截/111/222
  • 前端請求/111/222.do
  • 如果能進入,就代表ok

擴充

關於DispatcherServlet

​ 傳統的MVC中,我們需要自定義DispatcherServlet,並設定攔截路徑,比如*.do,但升級到Springboot後,啟動的時候會預設建立DispatcherServlet,並攔截/**,所以我們需要再自定義DispatcherServlet,即使註冊,日誌中也會提示,這個大家可以觀察

關於@EnableMVC註解

​ 我們已經升級到Springboot,該註解已經不需要,反而加上後,會導致一些配置失效,慎用。

幫人幫到底,送佛送到西

如果上述操作,無法解決你的問題,可以與我聯絡:

郵件地址:weipingtao@qq.com

郵件標題:【問題方案諮詢】xxxxx

相關文章