【问题标题】:Converting JSON Array to Java Array always throws empty values将 JSON 数组转换为 Java 数组总是抛出空值
【发布时间】:2021-10-06 17:47:38
【问题描述】:

所以我有这个包含 ff 的变量 specCifDetailsReturn。有效载荷

[
{"ax21:cHType":"S",
"ax21:cardNumber":4***********7126,"ax21:returnCde":"00",
"ax21:cancelCode":"",
"ax21:vipCode":"",
"ax21:custrNbr":"0*****3426"},

{"ax21:cHType":"S",
"ax21:cardNumber":4***********3038,"ax21:returnCde":"00",
"ax21:cancelCode":"H",
"ax21:vipCode":"",
"ax21:custrNbr":"0*****3426"}
]

还有 ff。模型类从数组中提取我需要的参数

@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonNaming(PropertyNamingStrategy.UpperCamelCaseStrategy.class)
public final class SpecCifInfo {

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

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

}

我正在尝试将其转换为 Java ArrayList,以便循环进入它并找到卡号。但是由于某种原因,即使 specCifDetailsReturn 变量有值,它总是在日志上抛出一个空值。下面是我的代码的 sn-p。

Gson gson = new Gson();
Type type = new TypeToken<List<SpecCifInfo>>(){}.getType();
ArrayList<SpecCifInfo> specDetails = gson.fromJson(specCifDetailsReturn.toString(),type);

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

具有空值的 SpecCifInfo 对象的示例输出

【问题讨论】:

  • 嗨 Joshua,这可能是某个地方的小问题。我尝试了您的代码 sn-p 和示例数据,它工作正常。也许你可以检查'Gson'版本,我用的是2.8.8。
  • 我添加了空 SpecCifInfo 对象的屏幕截图,即使我更改为 2.8.8,日志中仍然为空:/
  • 我的第一个想法是:那些卡号不可能是有效的json。这些必须被引用。

标签: java gson


【解决方案1】:

这些注释是针对 Jackson 库的,而您正在手动使用 Gson。您应该保留它们,让 Spring 通过在控制器方法中指定 List&lt;SpecCifInfo&gt; 参数来为您处理反序列化,或者您应该使用 GSON 的 @SerializedName 注释。无论哪种方式都可以。

【讨论】:

  • 在这两个选项中,我建议放弃 Gson,因为 G 似乎代表 garbage 而不是 Google
  • 好的,我认为这两个是可能的。我求助于删除 Gson 并允许 spring 反序列化并添加额外的模型类来指定参数以获取有效负载。谢谢。 Athis 是我的高级代码。 ObjectMapper objectMapper = new ObjectMapper(); SpecCifInfo specCifInfo = objectMapper.readValue(specCifDetails,SpecCifInfo.class); SpecCifInfo 具有子类来描述每个参数级别的有效负载。
猜你喜欢
  • 2013-01-23
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
相关资源
最近更新 更多