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

 

posted @ 2020-08-06 23:37  Maolic  阅读(1912)  评论(0编辑  收藏  举报