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

Spring Boot Java17中Jackson反序列化Predictions类报错求助

解决Jackson反序列化MismatchedInputException问题

核心问题分析

报错提示无法从字符串值'0.97982854'构造Predictions实例,说明Jackson反序列化时,在预期Predictions对象的位置读取到了字符串类型值,本质是实体类定义与JSON响应结构不匹配,或反序列化配置缺失。

排查与修复步骤

1. 确认JSON响应结构

先打印接口返回的原始JSON字符串,验证predictions数组的结构是否符合预期。正确结构应类似:

{
  "predictions": [
    {"probability": 0.97982854, "tagName": "sample-tag"}
  ]
}

如果实际返回的predictions是字符串数组(如["0.97982854", "tag1"]),则需直接调整实体类字段定义。

2. 修正Predictions实体类

确保实体类满足Jackson反序列化要求:

  • 必须包含无参构造方法(Jackson默认依赖),可通过Lombok的@NoArgsConstructor快速生成
  • 字段类型与JSON键严格匹配:probability用Double/double,tagName用String
  • 字段名与JSON键不一致时,用@JsonProperty指定映射关系

示例正确实现:

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Predictions {
    @JsonProperty("probability")
    private Double probability;
    
    @JsonProperty("tagName")
    private String tagName;
}

3. 检查CompuVisionResponse实体类

确保外层响应类的predictions字段为List<Predictions>类型:

import lombok.Data;
import java.util.List;

@Data
public class CompuVisionResponse {
    private List<Predictions> predictions;
}

4. 调整反序列化方式(可选)

若直接用ResponseEntity<CompuVisionResponse>报错,可先获取字符串响应再手动反序列化,便于定位问题:

RestTemplate restTemplate = new RestTemplate();
String rawResponse = restTemplate.getForObject("your-api-url", String.class);
System.out.println(rawResponse); // 确认响应内容

// 手动反序列化
ObjectMapper objectMapper = new ObjectMapper();
CompuVisionResponse response = objectMapper.readValue(rawResponse, CompuVisionResponse.class);

5. 处理字符串类型的数值字段

如果API返回的probability是字符串格式(如"probability": "0.97982854"),需开启Jackson的字符串转数值支持:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(DeserializationFeature.ACCEPT_STRING_AS_NUMBER);
// 用该ObjectMapper完成反序列化

或在Predictions的probability字段上添加注解:

@JsonFormat(shape = JsonFormat.Shape.STRING)
private Double probability;

验证

修复后重新调用接口,检查是否能正常读取predictions数组中的probability和tagName值,确认数据可正确存储。

内容的提问来源于stack exchange,提问作者Alejandro Huamaní Reátegui

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:51:00