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

升级Retrofit 2.9.1与OkHttp 3.X.X时Json转换器库报错求解决

解决Retrofit/OkHttp升级后Jackson转换器兼容问题

问题根源

你目前使用的org.codehaus.jackson:jackson-mapper-asl:1.9.13是Jackson 1.x版本的旧库,而Retrofit 2.9.1已经适配的是更新的Jackson 2.x体系,并且Retrofit官方提供了专门的Converter模块来处理JSON序列化/反序列化。旧的Jackson 1.x库的API和新版Retrofit的Converter接口不匹配,才导致了函数、参数找不到的报错。同时,OkHttp 3.10.0升级时,建议选择和Retrofit 2.9.1兼容的稳定版本(比如3.14.9,这是Retrofit 2.9.1依赖的OkHttp版本)。


具体解决步骤

1. 移除旧的Jackson 1.x依赖

在你的build.gradle(或build.gradle.kts)中删除这一行:

compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.13'

注意:如果你的项目用的是新版Gradle,compile已经被弃用,建议统一用implementation或api。

2. 添加Retrofit官方的Jackson Converter依赖

添加和你的Retrofit版本(2.9.1)匹配的Jackson Converter:

implementation 'com.squareup.retrofit2:converter-jackson:2.9.1'

这个包内部依赖了Jackson 2.x的核心库(com.fasterxml.jackson.core系列),不需要额外单独引入Jackson 2.x的其他包。

3. 升级OkHttp到兼容版本

将OkHttp升级到和Retrofit 2.9.1兼容的3.x版本,推荐使用3.14.9:

implementation 'com.squareup.okhttp3:okhttp:3.14.9'

4. 修改Retrofit实例的配置代码

原来你可能是手动用旧的Jackson Mapper处理序列化,现在需要切换为Retrofit的JacksonConverterFactory:

旧代码(示例写法):

// 旧的Jackson 1.x ObjectMapper
org.codehaus.jackson.map.ObjectMapper oldMapper = new org.codehaus.jackson.map.ObjectMapper();
Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(BASE_URL)
    // 手动处理转换(旧方式)
    .addConverterFactory(new CustomJacksonConverter(oldMapper))
    .client(okHttpClient)
    .build();

新代码:

// 新的Jackson 2.x ObjectMapper(来自com.fasterxml.jackson.databind包)
com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper();
// 如果需要自定义配置,比如忽略未知字段、日期格式化等
mapper.configure(com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(BASE_URL)
    // 使用官方的JacksonConverterFactory
    .addConverterFactory(JacksonConverterFactory.create(mapper))
    .client(okHttpClient)
    .build();

5. 替换代码中所有旧的Jackson API引用

把项目中所有导入的org.codehaus.jackson包替换为com.fasterxml.jackson对应的包:

  • 旧的org.codehaus.jackson.annotate.JsonProperty → 新的com.fasterxml.jackson.annotation.JsonProperty
  • 旧的org.codehaus.jackson.map.JsonMappingException → 新的com.fasterxml.jackson.databind.JsonMappingException
  • 其他Jackson相关的注解、类都要切换到Jackson 2.x的包下

额外注意点

  • Jackson 2.x是现在的主流维护版本,功能比1.x更完善,也解决了很多旧版本的bug
  • 如果你的项目中有其他依赖还在使用Jackson 1.x,可能会出现依赖冲突,这时候需要用Gradle的exclude功能排除掉旧的依赖,保证整个项目用的是Jackson 2.x

内容的提问来源于stack exchange,提问作者Soniya Joshi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:21:12