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

RestTemplate调用CoinDesk API后Jackson映射实体类bpi字段为空求助

问题分析

Jackson默认遵循JavaBean命名规范,会将实体类字段名转换为小写开头的键名(如USD→usd)去匹配JSON数据,但CoinDesk API返回的bpi节点下的键是全大写的"USD"、"GBP"、"EUR",导致字段无法匹配,最终返回null。

解决方案

方案一:给目标字段添加@JsonProperty注解(推荐)

直接在CurrentDetail类的字段上指定JSON对应的键名,精准匹配:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@JsonIgnoreProperties(ignoreUnknown = true)
public class CurrentDetail {

    @JsonProperty("USD")
    private CurrentInfo USD;

    @JsonProperty("GBP")
    private CurrentInfo GBP;

    @JsonProperty("EUR")
    private CurrentInfo EUR;
}

方案二:全局配置ObjectMapper命名策略

如果存在大量全大写键的场景,可修改ObjectMapper的命名策略,使其完全按照字段名原样匹配:

ObjectMapper objectMapper = new ObjectMapper();
// 使用IDENTITY策略,保持字段名与JSON键完全一致
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.IDENTITY);

CurrentPrice currentPrice = objectMapper.readValue(result, CurrentPrice.class);
验证效果

修改后重新执行代码,bpi下的USD、GBP、EUR字段将正确映射为CurrentInfo实例,输出结果与预期一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 12:50:28