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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 22:12:03