背景
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