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

升级Spring 6调用JacksonJsonProvider.setMapper时无法访问MessageBodyReader

解决Spring 6 + Jersey 3.1.0 + Jackson JSON Provider 编译错误问题

核心原因

Spring 6 基于**Jakarta EE 9+**规范,所有原javax.*包已迁移至jakarta.*包。你当前使用的com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:2.14.1是针对旧版javax.ws.rs的依赖,与兼容Jakarta EE的Jersey 3.x不匹配,直接导致javax.ws.rs.ext.MessageBodyReader无法找到、JacksonJsonProvider.setMapper()编译失败。

解决方案

1. 替换Jackson的Jakarta兼容依赖

移除旧的Jackson JAX-RS依赖,改用适配Jakarta EE的版本:

<!-- 删除原依赖 -->
<!-- <dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-json-provider</artifactId>
    <version>2.14.1</version>
</dependency> -->

<!-- 添加Jakarta兼容版依赖 -->
<dependency>
    <groupId>com.fasterxml.jackson.jakarta.rs</groupId>
    <artifactId>jackson-jakarta-rs-json-provider</artifactId>
    <version>2.14.1</version>
</dependency>

2. 修正代码导入路径

将代码中所有javax.ws.rs相关导入替换为jakarta.ws.rs,同时更新Jackson Provider的导入:

// 旧导入(删除)
// import javax.ws.rs.ext.MessageBodyReader;
// import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;

// 新导入
import jakarta.ws.rs.ext.MessageBodyReader;
import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider;

3. 验证setMapper()方法使用

替换依赖和导入后,JacksonJsonProvider.setMapper()可正常编译,示例代码:

JacksonJsonProvider jsonProvider = new JacksonJsonProvider();
ObjectMapper customMapper = new ObjectMapper();
// 自定义Mapper配置(示例:忽略未知属性)
customMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
jsonProvider.setMapper(customMapper);

4. 确保Jersey依赖一致性

确认所有Jersey依赖均为GlassFish提供的Jakarta兼容版本,避免混合javax和jakarta依赖:

<!-- Jersey核心依赖示例 -->
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>3.1.0</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet-core</artifactId>
    <version>3.1.0</version>
</dependency>

关键注意事项

  • Spring 6及后续版本完全抛弃javax包API,所有JAX-RS、Servlet相关组件必须切换到jakarta包版本。
  • Jackson的Jakarta版本groupId从com.fasterxml.jackson.jaxrs变更为com.fasterxml.jackson.jakarta.rs,artifactId同步调整,注意版本号保持一致(如示例中的2.14.1)。

内容的提问来源于stack exchange,提问作者Suhail Ahmed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:05:19