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

}

 

  

 

posted on 2018-07-25 14:53  唯忆学长  阅读(5500)  评论(0编辑  收藏  举报