springboot url映射


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

}

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM