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

使用Java Gson解析RunSignUp API返回JSON时字段为空求助

解决Gson解析RunSignUp API JSON时字段为空的问题

看起来你遇到的是Gson字段映射不匹配的典型问题,我来帮你分析下可能的原因和解决办法:

先排查最常见的问题:JSON结构和实体类不匹配

你提到API返回的JSON内容正常,但有没有注意到返回的顶层结构?很多REST API会把数据包裹在一层results或者data对象里,比如可能返回的JSON是这样的:

{
"results": {
"races": [
{"race_id": 12345, "name": "City Marathon"},
...
]
}
}

而你的RaceList类直接定义了private List<Race> races;,Gson找不到顶层的races字段,自然就会生成默认值的对象。这时候你需要调整RaceList的结构来匹配JSON的嵌套层级:

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class RaceList {
    private Results results;

    // 内部类对应JSON里的results对象
    @Data
    public static class Results {
        private List<Race> races;
    }
}

给字段添加@SerializedName注解确保精确映射

即使字段名看起来完全一致,有时候Gson的默认映射规则可能因为Lombok的生成逻辑、隐式的命名转换出现问题。给Race类的字段加上@SerializedName注解可以强制指定JSON字段名,彻底避免映射歧义:

package stefanowicz.kacper.model;
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Race {
    @SerializedName("race_id")
    private long race_id;
    @SerializedName("name")
    private String name;
}

额外检查:字段类型是否匹配

如果JSON里的race_id是字符串类型(比如"race_id": "6789"),而你的Java字段是long类型,Gson虽然会尝试自动转换,但如果转换失败就会设为默认值0。你可以看看打印的JSON里race_id是数字还是字符串,如果是字符串,要么把Java字段改成String类型,要么自定义类型适配器处理转换。

快速验证小技巧

你可以把API返回的JSON复制出来,用在线JSON转Java类的工具生成对应的实体类,对比一下和你自己写的RaceList、Race有什么差异,很快就能定位到结构不匹配的地方。

按照上面的步骤调整后,应该就能正常映射字段了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:03:39