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

使用Gson将JSON数组转换为Java ArrayList时属性始终为空如何解决

问题原因

  1. 注解框架不匹配:你代码中使用的@JsonAlias、@JsonNaming均为Jackson序列化框架的专属注解,但你实际执行JSON转对象时用的是Gson框架,Gson无法识别这些Jackson注解,无法将JSON中的ax21:cHType、ax21:cardNumber字段和Java类属性做映射,因此所有属性赋值为null。
  2. 次要排查点:检查你实际返回的JSON中cardNumber字段类型,如果为纯数字类型,Gson默认会解析为Number类型,用String类型接收也可能出现类型不匹配导致的null。

解决方法

方法1:替换为Gson原生注解(推荐)

修改SpecCifInfo类,移除Jackson相关注解,改用Gson的@SerializedName指定字段映射关系:

@Data
@AllArgsConstructor
@NoArgsConstructor
public final class SpecCifInfo {

    @SerializedName("ax21:cHType")
    private String cHType;

    @SerializedName("ax21:cardNumber")
    private String cardNumber;

}

如果实际JSON中cardNumber为纯数字,可将属性类型改为Long/Number,也可以配置Gson开启自动类型转换。

方法2:改用Jackson框架做序列化

如果你需要保留现有的Jackson注解,直接替换序列化实现即可:

ObjectMapper objectMapper = new ObjectMapper();
List<SpecCifInfo> specDetails = objectMapper.readValue(specCifDetailsReturn.toString(), new TypeReference<List<SpecCifInfo>>() {});

补充优化:日志打印修正

你当前的日志写法LOGGER.debug("Spec CIF Details", 内容)第一个参数没有占位符{},部分日志框架会直接忽略第二个参数,建议调整为:

LOGGER.debug("Spec CIF Details: {}", specInfo.getCHType() + "-" + specInfo.getCardNumber());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:06:03