“WebMvcConfigurerAdapter is deprecated”解決方法


  原來的一個小項目采用的是 Springboot 1.5.2 的老版本了,在對圖片調用時設置虛擬目錄時使用的了 WebMvcConfigurerAdapter,這次新建項目使用了 Springboot 2.2.1 的版本,同樣在設置虛擬目錄時發現並沒有生效,在配置類里面提示 WebMvcConfigurerAdapter 已經被棄用了(如下圖),所以記錄一下。

 

  這里先貼一下之前的代碼,使得在通過訪問 "/upload/img/xxx.jpg" 路徑時找到對應在C盤的 upload/image 文件夾下的圖片。

@Configuration
public class StaticMvcConfigurerAdapter extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/upload/img/**").addResourceLocations("file:C:/upload/img/");
        super.addResourceHandlers(registry);
    }
}

 

  於是在簡單了解后改用 WebMvcConfigurationSupport,配置方法與 WebMvcConfigurerAdapter 基本一致:

@Configuration
public class StaticMvcConfigurer extends WebMvcConfigurationSupport {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/upload/img/**")
                .addResourceLocations("file:C:/upload/img/");
        super.addResourceHandlers(registry);
    }
}

 

  重啟后,圖片確實能訪問到,但是在打開其他頁面時 js/css 等靜態資源均無法訪問,控制台提示 “No mapping for GET”。在使用 WebMvcConfigurationSupport 后,WebMvcAutoConfiguration類就不會自動配置,所以需要再加一行配置:

@Configuration
public class StaticMvcConfigurer extends WebMvcConfigurationSupport {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/static/")
                .addResourceLocations("classpath:/resources/");
        registry.addResourceHandler("/upload/img/**")
                .addResourceLocations("file:C:/upload/img/");
        super.addResourceHandlers(registry);
    }
}

 

  我的靜態資源放在了項目的resources\static目錄下,重新啟動后,js等靜態資源加載正常,圖片也能正常訪問。值得注意的是,再寫對應目錄時必須以 “/” 結尾(上方標記紅色處),否則無法訪問到。另外,通過實現WebMvcConfigurer接口,同樣可以實現。

 


免責聲明!

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



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