原來的一個小項目采用的是 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接口,同樣可以實現。