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

Retrofit调用报Jackson MismatchedInputException无法反序列化response异常

问题根因

报错的核心原因是接口返回的JSON为数组格式(以[开头),但你在Retrofit接口中定义的返回值是单个ReferralResponse对象类型,Jackson反序列化时类型不匹配触发异常。

解决方案

1. 修改Retrofit接口声明的返回类型

将你定义的接口返回值从Call<ReferralResponse>调整为Call<List<ReferralResponse>>,匹配接口返回的数组结构。示例:

// 原错误写法
// Call<ReferralResponse> getReferral(@Header("Authorization") String token);
// 修正后写法
Call<List<ReferralResponse>> getReferral(@Header("Authorization") String token);

2. 配置Jackson忽略未知字段(避免多余字段报错)

你不需要为所有返回字段生成实体类,只需在ReferralResponse类上添加@JsonIgnoreProperties(ignoreUnknown = true)注解,Jackson会自动跳过你没定义的字段,你现有的@JsonAnySetter注解也会把未定义的字段存入additionalProperties map中,不会触发反序列化失败:

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({/* 省略原有字段列表 */})
@JsonIgnoreProperties(ignoreUnknown = true) // 新增这行注解
@Generated("jsonschema2pojo")
public class ReferralResponse {
    // 原有类内容保持不变
}

如果是全局配置Retrofit的Jackson转换器,也可以直接给ObjectMapper设置该属性:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(BASE_URL)
    .addConverterFactory(JacksonConverterFactory.create(objectMapper))
    .build();

3. 调整业务代码获取id

反序列化后得到的是ReferralResponse列表,取对应元素的id转换即可,注意增加判空逻辑避免空指针:

Response<List<ReferralResponse>> referralResponseResponse = call1.getReferral(token).execute();
if (referralResponseResponse.isSuccessful() && referralResponseResponse.body() != null) {
    List<ReferralResponse> responseList = referralResponseResponse.body();
    if (!responseList.isEmpty()) {
        // 确认你要取的是列表中第几个元素的id,这里默认取第一个
        Object idObj = responseList.get(0).getId();
        // 安全转换为int,避免类型转换异常
        int id = idObj instanceof Number ? ((Number) idObj).intValue() : Integer.parseInt(idObj.toString());
        System.out.println("Int: " + id);
    }
}

内容的提问来源于stack exchange,提问作者fearghal O reilly

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:24:01