Tomcat 10.1迁移时Genson 1.6依赖javax包致类找不到问题求助
解决Genson 1.6在Tomcat 10.1环境下的Jakarta EE兼容问题
Tomcat 10.x 基于 Jakarta EE 规范,所有Java EE相关包名从javax.*迁移到了jakarta.*,而Genson 1.6官方默认版本仍依赖旧的javax.ws.rs API,这就是你遇到ClassNotFoundException: javax.ws.rs.core.FeatureContext的核心原因。以下是两种可行的解决办法:
方法一:使用Genson的Jakarta兼容分支版本
Genson官方提供了适配Jakarta EE的专属分支,只需替换原有Maven依赖即可:
<dependency> <groupId>com.owlike</groupId> <artifactId>genson-jakarta</artifactId> <version>1.6.0-jakarta</version> </dependency>
该版本已将所有javax.*引用替换为jakarta.*,可直接在Tomcat 10.1环境下正常工作,无需额外配置。
方法二:手动禁用自动发现并注册Genson
如果暂时无法切换到Jakarta分支版本,可通过以下步骤绕过自动发现的冲突:
- 禁用Genson的自动发现机制:在Jersey配置中关闭自动扫描,或在Maven依赖中排除自动发现相关模块。
- 手动注册Genson的JSON处理组件:在你的Jersey配置类(继承
ResourceConfig)中手动注册Genson的JSON Feature和Provider,确保使用Jakarta兼容的API。示例代码:
import jakarta.ws.rs.ApplicationPath; import org.genson.ext.jaxrs.GensonJsonFeature; import org.genson.ext.jaxrs.GensonProvider; @ApplicationPath("/api") public class MyApplication extends ResourceConfig { public MyApplication() { // 注册Genson的JSON处理组件 register(GensonJsonFeature.class); register(GensonProvider.class); // 注册你的业务资源类所在包 packages("com.your.package.resources"); } }
注意:若仍存在包名冲突,需自行编译Genson源码,将所有javax.ws.rs替换为jakarta.ws.rs后使用。
内容的提问来源于stack exchange,提问作者Marcodi
相关产品推荐
相关产品推荐

