JSON数组反序列化失败求助:无法将数组转为POJO实例
问题分析与解决方案
错误原因
返回的JSON是数组结构(用[]包裹),但你尝试将其反序列化为单个pojode对象,Jackson无法将数组转换为单个对象,因此抛出MismatchedInputException。
步骤1:修正POJO类
首先调整POJO的字段类型(JSON中id/disponibilita/prezzo是数字类型,建议用对应类型避免转换问题),并确保类的访问权限和必要的构造、方法:
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; // 忽略JSON中不存在的字段(比如titolo),避免反序列化报错 @JsonIgnoreProperties(ignoreUnknown = true) public class pojode { private Integer id; private Integer prezzo; private Integer disponibilita; private String titolo; // Jackson必须的无参构造函数 public pojode() {} // Getter和Setter方法 public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getPrezzo() { return prezzo; } public void setPrezzo(Integer prezzo) { this.prezzo = prezzo; } public Integer getDisponibilita() { return disponibilita; } public void setDisponibilita(Integer disponibilita) { this.disponibilita = disponibilita; } public String getTitolo() { return titolo; } public void setTitolo(String titolo) { this.titolo = titolo; } }
步骤2:修改反序列化代码
将JSON数组反序列化为List<pojode>集合,而不是单个对象:
import com.fasterxml.jackson.core.type.TypeReference; import java.util.List; // 反序列化为List集合 List<pojode> pojList = given().relaxedHTTPSValidation() .header("Content-Type", "application/json") .header("customerId", "xxx") .header("S2S-Authorization", res4) .expect().defaultParser(Parser.JSON) .when().get("xxx") .then().log().all() .extract().response().as(new TypeReference<List<pojode>>() {}); // 遍历集合输出数据 for (pojode item : pojList) { System.out.println("ID: " + item.getId()); System.out.println("价格: " + item.getPrezzo()); System.out.println("库存: " + item.getDisponibilita()); }
额外注意事项
- POJO类必须是
public权限,否则Jackson无法反射实例化。 - 如果坚持用
String类型存储数字字段,Jackson也能兼容,但可能存在隐式转换风险,建议优先使用对应数据类型。
内容的提问来源于stack exchange,提问作者Krishna Sriram
相关产品推荐
相关产品推荐

