You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot应用为何随机出现无法加载CSS、JS静态资源的问题?

问题根因分析
  • @EnableWebMvc导致默认静态资源映射失效:Spring Boot默认会自动注册类路径下/static、/public、/resources、/META-INF/resources目录的静态资源映射,你在WebConfig上加了@EnableWebMvc注解,会完全覆盖Spring Boot的MVC自动配置,静态资源映射只有在主动配置时才会生效,启动时配置加载顺序的随机性就会导致偶发找不到静态资源。
  • 静态资源路径写法不统一:thymeleaf的路径引用中,你既有绝对路径写法@{/static/css/styles.css},也有相对路径写法@{static/js/leaflet_canvas_layer.js},当页面路由不在根路径时(比如访问/routing返回index视图),相对路径会被拼接为/routing/static/js/xxx.js,自然找不到对应资源,这种和访问路径关联的错误就会表现为偶发异常。
  • 同路径同请求方法的接口冲突:你定义了两个路径都是/routing、请求方法都是GET的接口,一个返回视图一个返回JSON,内容协商策略在匹配时会出现优先级混乱,有时会抢占静态资源的请求匹配,导致静态资源请求被错误路由到业务接口,返回404错误。
解决方案
  • 移除@EnableWebMvc注解,恢复Spring Boot默认MVC配置:如果你只需要配置内容协商,不需要完全接管MVC配置,直接删除WebConfig类上的@EnableWebMvc注解即可,Spring Boot会自动保留静态资源映射,同时你自定义的内容协商配置也会生效。
    如果确实需要保留@EnableWebMvc,就手动添加静态资源映射,在WebConfig类中添加以下代码:
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/");
    }
    
  • 统一静态资源路径为绝对路径写法:所有thymeleaf引用的静态资源路径都加上开头的斜杠,比如把@{static/js/leaflet_canvas_layer.js}改为@{/static/js/leaflet_canvas_layer.js},避免相对路径拼接错误。
  • 合并同路径的GET接口避免冲突:将两个/routing的GET接口进行区分,比如给返回JSON的接口加路径前缀/api,改为@RequestMapping(value = "/api/routing",method=RequestMethod.GET,produces="application/json"),避免同路径接口匹配冲突,也符合接口开发规范。
  • 清除IDE缓存避免偶发加载异常:如果是本地开发时出现的问题,可以定期清理IDE的编译缓存、项目target目录,重启时重新编译整个项目,避免旧的类文件或配置缓存导致的映射异常。

内容的提问来源于stack exchange,提问作者Tiffy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:54:05