引入内部Gradle依赖后Spring Boot无法加载Angular静态资源求助
排查步骤
- 首先校验引入的内部Gradle依赖是否携带
@EnableWebMvc注解或自定义WebMvcConfigurer实现:该注解会完全关闭Spring Boot默认的WebMvc自动配置,直接覆盖默认的静态资源路径映射、欢迎页匹配规则,是这类依赖引入后静态资源失效的最常见原因。 - 开启Web层 debug 日志定位请求匹配逻辑:在
application.properties中添加logging.level.org.springframework.web.servlet=DEBUG,重启应用后访问根路径,查看日志中请求/的路由匹配过程,确认是否被自定义拦截器/控制器拦截,没有进入静态资源匹配逻辑。 - 检查配置属性是否被覆盖:运行时查看
spring.web.resources.static-locations、spring.web.resources.add-mappings两个属性的实际值,确认是否被内部依赖的配置类或外置配置修改,导致静态资源映射被关闭或路径被篡改。
解决方案
方案1:排除依赖的Web相关自动配置
如果确认是内部依赖的自定义MVC配置导致默认规则失效,在启动类注解中排除对应配置类即可恢复默认静态资源处理能力:
@SpringBootApplication(exclude = { 内部依赖的自定义Web配置类全限定名.class }) public class WebApplication { public static void main(String[] args) { SpringApplication.run(WebApplication.class, args); } }
方案2:手动重写MVC配置恢复映射
如果无法修改内部依赖的配置,自行实现WebMvcConfigurer手动补充静态资源和欢迎页映射规则即可:
import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class StaticResourceConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // 覆盖所有静态资源请求,映射到Spring Boot默认的静态资源目录 registry.addResourceHandler("/**") .addResourceLocations( "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/" ); } @Override public void addViewControllers(ViewControllerRegistry registry) { // 显式配置根路径转发到index.html作为欢迎页 registry.addViewController("/").setViewName("forward:/index.html"); } }
可以同时在application.properties中添加如下配置做兜底:
# 显式开启静态资源映射 spring.web.resources.add-mappings=true # 指定静态资源扫描路径 spring.web.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

