spring boot 只要把静态资源放在static目录下,理论是可以直接访问的。
但是,今天却发现了一个很是头疼的问题,静态资源放入static文件夹了,但通过浏览器却是访问不到。
网上搜索了一大堆,都是一份文章你抄来,他抄去,一点价值都没有。
于是回到控制台,仔细查看spring boot 启动时输出的日志信息:
发现spring boot并没有对这个URL做映射,这应该是我做了什么自定义配置导致的spring boot 默认的自动配置被替换掉了。
于是把问题定位到了一个继承了WebMvcConfigurationSupport的java配置上:
public class WebConfig extends WebMvcConfigurationSupport {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new HttpInterceptor());
}
}
有可能是这段代码导致的URL映射没自动进行。关掉这个配置,果然能从浏览器访问到静态资源了。
于是寻找这个配置添加资源映射的方法,找到了一个addResourceHandlers方法。
重载这个方法,搜索ResourceHandlerRegistry的用法:
private static final String[] RESOURCE_LOCATIONS =
{ "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/" };
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
try {
File directiory = new File("");
registry.addResourceHandler("/**").addResourceLocations(RESOURCE_LOCATIONS).addResourceLocations("file:" + directiory.getCanonicalPath() + "/");
} catch (Exception e) {
}
}
添加之后,静态资源正常访问。