Spring Boot无法提供静态资源问题求助
问题分析与解决方案
这个问题的根源其实很简单——你在ExpensalyzeApplication类上添加了@EnableWebMvc注解,这直接禁用了Spring Boot自动配置的静态资源处理逻辑!
为什么会这样?
Spring Boot的WebMvcAutoConfiguration自动配置类,默认已经帮我们处理了静态资源的映射规则:它会把src/main/resources/static/目录下的文件,自动映射到应用的根路径(比如你要访问的/css/default.css,正好对应static/css/default.css)。
但一旦你手动添加@EnableWebMvc注解,就相当于告诉Spring Boot:「我要完全自定义Spring MVC配置,不需要你的自动配置了」。这就导致原本自动生效的静态资源映射被直接关闭,所以你的CSS文件才会返回404,而控制器接口因为是你手动定义的,不受影响。
解决方案(二选一)
方案一:移除@EnableWebMvc注解(推荐)
你的项目没有自定义Spring MVC的特殊需求,完全可以依赖Spring Boot的自动配置。修改ExpensalyzeApplication.java:
@SpringBootApplication // 移除@EnableWebMvc注解 // 另外@SpringBootApplication已经包含了@ComponentScan,默认扫描当前包及其子包,所以@ComponentScan也可以省略 public class ExpensalyzeApplication { public static void main(String[] args) { SpringApplication.run(ExpensalyzeApplication.class, args); } }
方案二:保留@EnableWebMvc,手动配置静态资源映射
如果你确实需要自定义Spring MVC配置,必须手动添加静态资源的映射规则。创建一个Web配置类:
@Configuration @EnableWebMvc public class WebMvcConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // 配置和Spring Boot默认一致的静态资源映射 registry.addResourceHandler("/**") .addResourceLocations("classpath:/static/"); } }
验证方法
修改完成后,重新执行构建和启动命令:
$ ./gradlew clean build $ java -jar build/libs/expensalyze.jar
此时访问http://localhost:8080/css/default.css就能正常加载静态资源了。
内容的提问来源于stack exchange,提问作者user9530236




