Restassured反序列化JSON至POJO失败:START_ARRAY token错误排查
问题分析与解决
错误原因
Cannot deserialize instance of 'pojo.SuperRoot' out of START_ARRAY token 错误的核心是:你的JSON响应根结构是数组(以[开头),但你试图将其反序列化为单个SuperRoot对象,Jackson无法将数组直接映射到包含列表的外层对象上。
你的SuperRoot类设计为包裹List<Root>,但目标JSON没有外层对象,直接是Root对象的数组,两者结构不匹配。
解决方案
方案1:直接反序列化为List<Root>
这是最直接的解决方式,无需使用SuperRoot类,直接将JSON数组映射为List<Root>:
RestAssured示例代码:
List<Root> rootList = given() .when() .get("接口地址") .then() .extract() .body() .jsonPath() .getList("", Root.class);
ObjectMapper直接处理示例:
ObjectMapper mapper = new ObjectMapper(); List<Root> rootList = mapper.readValue(jsonContent, new TypeReference<List<Root>>() {});
方案2:调整SuperRoot适配数组结构(可选)
如果必须保留SuperRoot类,可通过Jackson注解让它支持数组输入:
import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; import java.util.List; public class SuperRoot { private List<Root> root; @JsonCreator public SuperRoot(List<Root> root) { this.root = root; } @JsonValue public List<Root> getRoot() { return root; } // 保留原有getter/setter方法 }
反序列化时直接映射到SuperRoot即可:
SuperRoot superRoot = mapper.readValue(jsonContent, SuperRoot.class);
补充说明
你的Root类结构与JSON中的单个对象完全匹配,只要解决根层级的数组与对象映射问题,反序列化即可成功。
内容的提问来源于stack exchange,提问作者apoorv sinha
相关产品推荐
相关产品推荐

