目录
- 版本
- 前言
- 升级过程
-
- 【升级】springboot升级为3.2.5
- 【改造】javax.annotation-api->jakarta.annotation-api
- 【异常】java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid'
- 【异常】java: 无法访问javax.validation.ConstraintValidator
- 【异常】Exception in thread "main" java.lang.AbstractMethodError: Receiver class org.springframework.boot.logging.logback.RootLogLevelConfigurator does not define or inherit an implementation of the resolved method 'abstract void configure(ch.qos.logback.classic.LoggerContext)' of interface ch.qos.logback.classic.spi.Configurator.
- 【异常】Invalid value type for attribute 'factoryBeanObjectType': java.lang.String
- 【异常】java.lang.IllegalStateException: Could not resolve parameter [1] in public com.dolphin.api.utils.Result com.dolphin.api.exceptions.ApiExceptionHandler.exceptionHandler(java.lang.Exception,org.springframework.web.method.HandlerMethod): No suitable resolver
- 附录(pom.xml)
版本
- SpringBoot 3.2.5
- jdk21
前言
javax
Servlet、JPA 等从 javax 迁移到 jakarta 命名空间。
spring
@PathVariable必须指定参数名
@PathVariable Long projectCode 错误
@PathVariable(value ="projectCode" ) Long projectCode 正确
mybatis plus
升级 Mybatis-Plus 版本为 3.5.5 版本,需要注意下 Maven 的坐标标识是
mybatis-plus-spring-boot3-starter
,这点和SpringBoot 2 的依赖坐标mybatis-plus-boot-starter
有所区别。
hibernate-validator
类不存在
升级过程
【升级】springboot升级为3.2.5
截止到2024-05-14最稳定版本为3.2.5 故选择该版本
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
【改造】javax.annotation-api->jakarta.annotation-api
spring6开始 Servlet、JPA 等从 javax 迁移到 jakarta 命名空间。
Jakarta EE 和 javax 是 Java 企业版规范的发展,以前称为 Java EE(Java Platform, Enterprise Edition)和 J2EE(Java 2 Platform, Enterprise Edition)。Jakarta EE 实际上是 Java EE 在 Eclipse 基金会的管理下的新品牌和继续发展,这是在甲骨文将 Java EE 转让给它们之后的情况。由于 “Java” 名称的商标问题,这种改变需要重新命名,“Java” 名称仍由 Oracle 拥有 (Baeldung)。
这一转变中最显著的变化之一是命名空间从 javax.* 切换到 jakarta.*。这一变化从 Jakarta EE 9 开始正式实施,对开发者来说是一个重大转变,因为所有以前的 javax 命名空间下的规范和应用程序都需要过渡到 jakarta (Jakarta EE)。例如,以前的 javax.servlet 现在变为 jakarta.servlet。这种重命名影响到 Java 企业开发的所有方面,从应用服务器到构建工具和框架,这些都已更新以适应新的命名空间 (JetBrains)。
从 javax 到 jakarta 的过渡还涉及更新项目依赖,这可能因库名称和版本的变化而复杂。工具如 Eclipse Transformer 可以帮助迁移应用程序,通过转换现有的 javax 类和包到 jakarta (DZone) (JetBrains)。
总体而言,向 Jakarta EE 的过渡代表了向开放、社区驱动的过程的广泛转变,用于发展企业 Java 规范,提供一个平台,继续支持在现代、分布式计算环境中的大规模服务器端应用 (The Enterprisers Project)。
- 添加 jakarta.servlet 依赖
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>2.1.0</version>
</dependency>
- 修改项目内所有代码的导入依赖
//修改前:
import javax.servlet.*
//修改后:
import jakarta.servlet.*
【异常】java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field ‘com.sun.tools.javac.tree.JCTree qualid’
lombok版本兼容性的问题
Maven依赖更新新版 lombok 为 1.18.30以上 即可
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>
【异常】java: 无法访问javax.validation.ConstraintValidator
找不到javax.validation.ConstraintValidator的类文件
修改hibernate-validator
版本为8.0.1.Final
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>8.0.1.Final</version>
</dependency>
【异常】Exception in thread “main” java.lang.AbstractMethodError: Receiver class org.springframework.boot.logging.logback.RootLogLevelConfigurator does not define or inherit an implementation of the resolved method ‘abstract void configure(ch.qos.logback.classic.LoggerContext)’ of interface ch.qos.logback.classic.spi.Configurator.
logback版本导致,修改为下面版本
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.13</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12