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); } }