“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接口,同样可以实现。