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

Spring Boot中如何将JSON数组映射为Java实体类?

正确映射外部API JSON的Java实体类方案

错误原因分析

你的实体类定义存在三个核心问题:

  1. data字段映射错误:原JSON中data是直接的Coin对象数组,你却额外套了一层Data类,导致Jackson无法匹配数组结构。
  2. quote字段类型错误:quote的value是包含price的价格对象,并非Coin类型,你定义的Map<String, Coin>完全不符合JSON结构。
  3. 缺少Status实体类:你在MainDTO中声明了Status字段,但未实现对应的实体类。

正确的实体类定义

1. MainDTO(主实体类)

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class MainDTO {
    @JsonProperty("status")
    private Status status;
    @JsonProperty("data")
    // 直接用List接收JSON数组,无需额外包装类
    private List<Coin> data;
}

2. Status类(映射status节点)

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class Status {
    @JsonProperty("timestamp")
    private String timestamp;
    @JsonProperty("error_code")
    private Integer errorCode;
    @JsonProperty("error_message")
    private String errorMessage;
}

3. Coin类(映射data数组中的元素)

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class Coin {
    @JsonProperty("id")
    private Integer id;
    @JsonProperty("name")
    private String name;
    @JsonProperty("tags")
    private List<String> tags;
    // quote的key是币种(USD/BTC),value是包含price的对象,用Map<String, QuotePrice>匹配
    @JsonProperty("quote")
    private Map<String, QuotePrice> quote;
}

4. QuotePrice类(映射quote中的价格节点)

@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
public class QuotePrice {
    @JsonProperty("price")
    private Double price;
}

补充说明

  • 用List代替数组更灵活,Jackson会自动完成JSON数组到List的转换。
  • 所有字段建议加上@JsonProperty注解,确保JSON键与Java字段名严格匹配(尤其是下划线命名的JSON键,比如error_code对应Java的errorCode)。
  • 如果不需要全参构造器,仅保留@NoArgsConstructor即可,Jackson反序列化只依赖无参构造。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:05:19