spring boot.2x 自定义WebConfig 后静态资源不能访问
1.现象
在使用SpringBoot2.x的时,自定义WebConfigurer
时继承从WebMvcConfigurerAdapter
改成了WebMvcConfigurationSupport
,然而发现只要继承 WebMvcConfigurationSupport
并且将文件加入配置,在yml中配置路径的相关内容会失效,就会遇到静态资源无法访问的问题。
2.原因及解决方法
这是因为WebMvc的自动配置都在WebMvcAutoConfiguration
类中,但是类中有这个注解@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
,意思是一旦在容器中检测到WebMvcConfigurationSupport
这个类,WebMvcAutoConfiguration
类中的配置都不生效。所以一旦我们自己写的配置类继承了WebMvcConfigurationSupport
,相当于容器中已经有了WebMvcConfigurationSupport
,所以默认配置都不会生效,都得自己在配置文件中配置。
静态资源映射配置
@Component
class WebConfigurer extends WebMvcConfigurationSupport {
/**
* 可以分别配置多个静态路径的映射规则,spring会自动调用add()方法进行规则添加.
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//静态目录映射
registry.addResourceHandler("/**")
.addResourceLocations("classpath:/META-INF/resources/")
.addResourceLocations("classpath:/resources/")
.addResourceLocations("classpath:/static/")
.addResourceLocations("classpath:/public/");
//特定静态目录映射
registry.addResourceHandler("/files/**")
.addResourceLocations("file:///"+bootdoConfig.getUploadPath());
super.addResourceHandlers(registry);
}
}