这个报错主要是Spring Boot3.0已经为所有依赖项从 Java EE 迁移到 Jakarta EE API,导致 servlet 包名的修改,Spring团队如许做的原因,主要是避免 Oracle 的版权题目,解决办法很简朴,两步走:
1 添加 jakarta.servlet 依赖
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
</dependency>
复制代码
修改项目内所有代码的导入依赖
修改前:
import javax.servlet.*
修改后:
import jakarta.servlet.*
复制代码
二. 附带的众多依赖包升级,导致的部分代码写法过期报警
2.1 Thymeleaf升级到3.1.0.M2,日记打印的报警
14:40:39.936 [http-nio-84-exec-15] WARN o.t.s.p.StandardIncludeTagProcessor - [doProcess,67] - [THYMELEAF][http-nio-84-exec-15][admin/goods/goods] Deprecated attribute {th:include,data-th-include} found in template admin/goods/goods, line 4, col 15. Please use {th:insert,data-th-insert} instead, this deprecated attribute will be removed in future versions of Thymeleaf.
14:40:39.936 [http-nio-84-exec-15] WARN o.t.s.p.AbstractStandardFragmentInsertionTagProcessor - [computeFragment,385] - [THYMELEAF][http-nio-84-exec-15][admin/goods/goods] Deprecated unwrapped fragment expression "admin/header :: header-fragment" found in template admin/goods/goods, line 4, col 15. Please use the complete syntax of fragment expressions instead ("~{admin/header :: header-fragment}"). The old, unwrapped syntax for fragment expressions will be removed in future versions of Thymeleaf.
按照 Spring Boot 3.0要求,在项目resources 下新建 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件,手动将第三方库的 spring.factories 加到 imports 中,如许可以手动修复第三方库 spring boot starter 依赖失效题目
四. Mybatis Plus 依赖题目
Mybatis plus 最新版本照旧3.5.2,其依赖的 mybatis-spring 版本是2.2.2(mybatis-spring 已经发布了3.0.0版本适配 Spring Boot 3.0),这会导致项目中的sql查询直接报错,这里主要是因 Spring Boot 3.0中删除 NestedIOException 这个类,在 Spring boot 2.7中这个类还存在,给出类阐明截图
这个类在2.7中已经被标记为废弃,建议替换为 IOException, 而 Mybatis plus 3.5.2中还在使用。这里给出题目截图 MybatisSqlSessionFactoryBean 这个类还在使用 NestedIOException
查看 Mybatis plus 官方issue也已经有人提到了这个题目,官方的说法是 mybatis-plus-spring-boot-starter 还在验证尚未推送maven官方堆栈,这里我就不得不动用我的小聪明,给出解决方案: