Java17与Spring Boot升级后API请求触发AbstractMethodError错误
问题原因
这是Spring Boot 3.x版本的核心变化导致的:Spring Boot 3.x基于Jakarta EE 9+,所有Servlet相关的API包名从javax.servlet改为了jakarta.servlet。你的自定义过滤器CachingRequestBodyFilter继承了OncePerRequestFilter,但重写的doFilterInternal方法仍使用旧的javax.servlet相关类,和Spring Boot 3.x要求的jakarta.servlet方法签名不匹配,因此触发AbstractMethodError。
解决方案
- 修改过滤器类的导入包,将所有
javax.servlet开头的导入替换为jakarta.servlet:// 替换前 import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.FilterChain; // 替换后 import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.FilterChain; - 确保
doFilterInternal方法的参数类型完全匹配jakarta.servlet的类:@Override protected void doFilterInternal( jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, jakarta.servlet.FilterChain filterChain ) throws ServletException, IOException { // 原有业务逻辑 } - 检查项目中所有自定义过滤器、拦截器等涉及Servlet API的代码,统一替换包名,避免遗漏。
- 确认项目依赖中无残留的
javax.servlet相关依赖(如旧版本servlet-api),Spring Boot 3.x会自动引入jakarta.servlet-api,无需手动添加。
额外注意
若项目使用第三方库,需确保这些库已适配Jakarta EE(即使用jakarta.servlet包),否则会出现同类兼容性问题。优先选择支持Spring Boot 3.x的库版本。
内容的提问来源于stack exchange,提问作者Mohit Chaudhary
相关产品推荐
相关产品推荐

