You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动