spring-boot 4 静态资源访问问题
Spring Boot 4.0.1 中静态资源映射功能并没有被移除,WebMvcConfigurer.addResourceHandlers() 和配置文件方式都仍然可用。但如果你遇到了静态资源404的问题,大概率是以下几个原因导致的:
一、最常见原因:@EnableWebMvc 导致自动配置全部退出
这是 Spring Boot 4 中最高频的踩坑点。一旦你的配置类上加了 @EnableWebMvc,WebMvcAutoConfiguration 会全面退出,包括静态资源处理器(ResourceHandlerRegistration)、内容协商等默认注册全部消失。
错误写法:
@EnableWebMvc // ← 这个注解会禁用所有默认配置!
@Configuration
public class MvcConfig implements WebMvcConfigurer {
// 你的自定义配置...
}
正确写法:
@Configuration // ← 只用 @Configuration,不加 @EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
// 你的自定义配置会与默认配置合并
}
二、重写了 addResourceHandlers 但未保留默认路径
当你实现 WebMvcConfigurer 并重写 addResourceHandlers() 时,默认的资源处理器不会自动保留,需要手动恢复:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// 1. 恢复默认静态资源路径(必须手动添加)
registry.addResourceHandler("/**")
.addResourceLocations(
"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/"
);
// 2. 你的自定义路径
registry.addResourceHandler("/uploads/**")
.addResourceLocations("file:/opt/uploads/");
}
}
三、配置类未被扫描到
Spring Boot 4 中 Bean 排序更加刚性化,多个 WebMvcConfigurer 实例按 @Order 升序执行,未标注 @Order 的默认为 Ordered.LOWEST_PRECEDENCE(最后执行),极易被前置配置覆盖。
建议显式指定优先级:
@Configuration
@Order(Ordered.HIGHEST_PRECEDENCE)
public class WebConfig implements WebMvcConfigurer {
// ...
}
四、配置文件方式仍然有效
如果不想写 Java 配置类,application.yml 方式在 Spring Boot 4 中依然正常工作:
spring:
web:
resources:
static-locations:
- classpath:/static/
- classpath:/public/
- file:/opt/uploads/
mvc:
static-path-pattern: /**
五、诊断步骤
如果以上都排除了还是404,可以通过以下方式排查:
- 检查自动配置是否生效:访问
http://localhost:8080/actuator/mappings,确认是否存在resourceHandler映射 - 开启调试日志:
观察日志中是否出现logging: level: org.springframework.web.servlet.resource: DEBUGResourceHttpRequestHandler: Looking for resource...的记录 - 检查
@ComponentScan:确保配置类所在包被启动类扫描到
总结
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 静态资源全部404 | 加了 @EnableWebMvc |
删除 @EnableWebMvc |
| 部分资源404 | 重写 addResourceHandlers 未保留默认路径 |
手动添加默认路径 |
| 配置不生效 | 配置类未被扫描或优先级过低 | 检查包扫描 + 加 @Order |
静态资源映射在 Spring Boot 4.0.1 中完全可用,只是配置上的"坑"比之前版本更多了,核心原则是:不要加 @EnableWebMvc,用 @Configuration 即可。
需要我帮你整理一份 Spring Boot 4.0 中 WebMvcConfigurer 的完整配置示例吗?包含静态资源、跨域、拦截器的组合写法,可以直接复制使用。

浙公网安备 33010602011771号