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

如何仅用注解在Jackson中反序列化以数组开头的JSON

解决Jackson反序列化数组到含列表的DTO类问题

问题原因

你的JSON响应根节点是数组类型,但目标类GetPersonsResponseDto是对象类型,Jackson默认会尝试将JSON对象映射到DTO实例,因此遇到数组起始的START_ARRAY令牌时抛出反序列化异常。

解决方案

修改GetPersonsResponseDto类,添加带@JsonCreator注解的构造器,让Jackson将JSON数组直接解析为List<Person>并赋值给persons字段:

public class GetPersonsResponseDto {
    public List<Person> persons;

    // @JsonCreator标注构造器,Jackson会把JSON数组解析为List<Person>传入
    @JsonCreator
    public GetPersonsResponseDto(List<Person> persons) {
        this.persons = persons;
    }

    // 可选:若需序列化该类或Jackson要求无参构造器,添加无参构造器
    public GetPersonsResponseDto() {}
}

验证

修改后,原有的反序列化代码可正常执行:

ObjectMapper mapper = new ObjectMapper();
mapper.readValue(in, GetPersonsResponseDto.class);

Person类无需修改,Jackson默认能解析其name字段。

内容的提问来源于stack exchange,提问作者No3x

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:40:23