1、問題背景
之前使用SpringMVC在web.xml配置過如下url映射,切換到springboot后,無法訪問*.do請求
<servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:dispatcherContext.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>*.do</url-pattern> <url-pattern>*.json</url-pattern> <url-pattern>/</url-pattern> </servlet-mapping>
2、SpringMVC的servlet的url-pattern匹配規則
四種匹配模塊
2.1 精確匹配
<url-pattern>中配置的項必須與url完全精確匹配。
2.2 路徑匹配
以“/”字符開頭,並以“/*”結尾的字符串用於路徑匹配
2.3 擴展名匹配
以“*.”開頭的字符串被用於擴展名匹配
2.4 缺省匹配
以上都找不到servlet,就用默認的servlet,配置為<url-pattern>/</url-pattern>
可參考https://www.cnblogs.com/canger/p/6084846.html
3、Springboot的url匹配規則
解決方案:將WebMvcConfigurer接口的setUseSuffixPatternMatch,設置為true;
查詢到的解決方案一:
(1)啟動類 extends WebMvcConfigurationSupport
(2)重寫configurePathMatch方法
存在問題:無法訪問靜態資源
查詢到的解決方案二:
(1)啟動類 extends WebMvcConfigurerAdapter
(2)重寫configurePathMatch方法
可參考:http://412887952-qq-com.iteye.com/blog/2398639
4.自己的實現
為了啟動類的簡潔,使用了一個@Configuration類來重寫
/** * @Author: chenhao * @Date: 2018-07-24 */ @Configuration public class CustomwebMvcConfigurer extends WebMvcConfigurerAdapter { // 如果繼承了WebMvcConfigurationSupport,會覆蓋訪問靜態資源的配置,無法訪問靜態資源,必須繼承WebMvcConfigurerAdapter @Override public void configurePathMatch(PathMatchConfigurer pathMatchConfigurer) { //是否是后綴模式匹配,如果是true,請求download.* 可以映射到download pathMatchConfigurer.setUseSuffixPatternMatch(true); } }