Spring Boot解析JSON时抛出MismatchedInputException异常问题求助
问题1:RestTemplate反序列化类型指定错误
你要反序列化的JSON根节点是数组类型,但调用getForObject时第二个参数传了Info.class,相当于要求RestTemplate把JSON数组转换成单个Info对象,类型完全不匹配,这是抛出异常的核心原因。
正确写法需要用ParameterizedTypeReference指定泛型的List类型:
@GetMapping public String setInfo() { var info = m_restTemplate.exchange(url, HttpMethod.GET, null, new ParameterizedTypeReference<List<Info>>() {}).getBody(); return "test"; }
问题2:实体类Getter方法返回类型不匹配
你定义的number属性是double基础类型,但对应的getNumber()方法返回值写的是Object,Jackson反序列化时会根据Getter/Setter匹配字段,此处类型不一致会导致反序列化失败,修改Getter返回值即可:
public double getNumber() { return number; }
可选兼容配置
你JSON里的number字段是字符串格式的数值(带双引号),如果Jackson默认没有开启字符串转数字配置,也会报类型不匹配,两种解决方式可选:
- 方式1:在
number属性上加@JsonFormat(shape = JsonFormat.Shape.STRING)注解 - 方式2:全局配置Jackson反序列化规则,开启
DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT配置项,也可以直接把实体类的number改成String类型后续自行转换。
可选检查点
如果接口返回的JSON存在实体类未定义的额外字段,@JsonIgnoreProperties需要配置ignoreUnknown = true避免报错:
@JsonIgnoreProperties(ignoreUnknown = true) public class Info { // 其余代码 }
内容的提问来源于stack exchange,提问作者iraquois
相关产品推荐
相关产品推荐

