如何仅用注解在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
相关产品推荐
相关产品推荐

