肥仔教程网

SEO 优化与 Web 开发技术学习分享平台

Spring Boot 2.x → 3.x 升级后 "No static resource" 错误完整排查指南

Spring Boot 2.x → 3.x 升级后 "No static resource" 错误完整排查指南

在将 Spring Boot 从 2.x 升级到 3.x 后,很多同学会遇到 No static resource 报错。
这通常和 资源处理配置的改变 以及 Jakarta EE 的引入 有关。下面我们通过表格、代码示例和实战排查技巧,快速定位并解决问题。


常见原因对比表

问题领域

2.x 配置/用法

3.x 配置/用法

关键变更点

Servlet API

javax.servlet

jakarta.servlet

包名前缀从 javax 更换为 jakarta

静态资源路径

默认:classpath:/static/ 等

默认路径同 2.x,但配置属性可能有变

建议检查并显式配置
spring.web.resources.static-locations

CORS 配置

.addAllowedOrigin("*")

.addAllowedOriginPattern("*")

addAllowedOrigin 不再接受 *,需改用 addAllowedOriginPattern

自定义配置

自动配置生效即可

可能需要显式实现 WebMvcConfigurer 并添加资源处理器

静态资源处理器需要更明确配置


详细排查步骤

1. 检查并更新 Servlet 导入

Spring Boot 3.x 迁移到 Jakarta EE,所有与 Web 相关的 API 包路径都从 javax 变成了 jakarta。

//  Spring Boot 3.x 正确写法
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

建议:全局搜索 javax.servlet,统一替换为 jakarta.servlet。


2. 显式配置静态资源路径

虽然默认位置未变(classpath:/static/, classpath:/public/ 等),
但升级后可能需要在配置文件中显式指定

# application.properties
spring.web.resources.static-locations=classpath:/static/
spring.mvc.static-path-pattern=/**
# application.yml
spring:
  web:
    resources:
      static-locations: classpath:/static/
  mvc:
    static-path-pattern: "/**"

提示:可以配置多个路径,如 classpath:/static/,classpath:/public/。


3. 检查自定义 WebMvc 配置

如果你自定义了 Web 配置类,需要手动添加静态资源映射。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 静态资源
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/static/");
        // WebJars
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}

4. 更新 CORS 配置

Spring Boot 3.x 中,addAllowedOrigin("*") 已弃用。

configuration.addAllowedOriginPattern("*"); //  新写法

5. 检查启动类注解

确保主类使用 @SpringBootApplication,否则部分自动配置(包括静态资源)可能不会生效。

@SpringBootApplication
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

实战排查技巧

  1. 确认资源是否打包
    检查 target/classes/static/(Maven)或 build/resources/main/static/(Gradle)。
    如果目录下没有文件,说明是 打包问题,而不是 Spring 配置问题。
  2. 开启调试日志查看映射
    在 application.properties 添加:
logging.level.org.springframework.web=DEBUG
logging.level.org.springframework.boot.autoconfigure.web=DEBUG

重启应用后,日志中会显示静态资源路径的映射情况。


i 其他常见升级问题

除了静态资源问题,从 Spring Boot 2.x 升级到 3.x 还可能遇到:

  • JDK 版本要求:Spring Boot 3.x 需要 JDK 17+
  • 包名迁移:如 javax.validation → jakarta.validation。
  • Swagger 兼容性:Swagger 2 不再兼容,需升级到 SpringDoc OpenAPI。
  • Spring Security:WebSecurityConfigurerAdapter 已被弃用,需使用基于 SecurityFilterChain 的配置。
  • 第三方依赖:确保 MyBatis、Druid、Sentinel 等使用兼容 Spring Boot 3.x 的版本。

总结

  • 错误根源:Jakarta EE 包迁移 & 静态资源配置差异。
  • 首要检查
  1. javax.* → jakarta.*
  2. 显式配置 spring.web.resources.static-locations
  3. 自定义 WebMvcConfigurer 资源映射
  • 实战技巧:确认资源是否打包、打开调试日志。

大多数情况下,只要修正 导包 + 资源路径配置,就能快速解决 "No static resource" 报错。


控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言