You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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分支版本,可通过以下步骤绕过自动发现的冲突:

  1. 禁用Genson的自动发现机制:在Jersey配置中关闭自动扫描,或在Maven依赖中排除自动发现相关模块。
  2. 手动注册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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 21:49:54