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

Payfort交易JSON转POJO出现类型不匹配错误,求解决方案

问题根源分析

你的JSON根结构是混合类型数组:第一个元素是嵌套的交易对象数组,第二个元素是包含data_count的统计对象;但你的POJO定义成了普通对象,且解析代码错误地试图将JSON转为List<DownloadReportResponse>,完全和JSON结构不匹配,这是类型不匹配的核心原因。

解决方案

步骤1:完善子POJO定义

确保字段名和JSON键对应,添加@JsonProperty注解处理下划线命名:

// 交易统计类
@Data
public class TransactionCount {
    @JsonProperty("data_count")
    private Integer dataCount;
}

// 单条交易响应类
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class TransactionsResponse {
    @JsonProperty("response_code")
    private String responseCode;
    @JsonProperty("card_holder_name")
    private String cardHolderName;
    @JsonProperty("acquirer_mid")
    private String acquirerMid;
    @JsonProperty("payment_link_id")
    private String paymentLinkId;
    @JsonProperty("order_description")
    private String orderDescription;
}

步骤2:两种适配JSON数组结构的解析方式

方式一:手动拆分数组元素(简单直观)

直接将JSON解析为List<Object>,再分别转换为对应类型:

ObjectMapper mapper = new ObjectMapper();
// 解析根数组
List<Object> rootElements = mapper.readValue(report, new TypeReference<List<Object>>() {});

// 转换第一个元素:嵌套交易数组
List<TransactionsResponse> transactions = mapper.convertValue(
    rootElements.get(0),
    new TypeReference<List<TransactionsResponse>>() {}
);

// 转换第二个元素:统计对象
TransactionCount count = mapper.convertValue(rootElements.get(1), TransactionCount.class);

// 组装到你的根POJO
DownloadReportResponse result = new DownloadReportResponse();
result.setTransactions(transactions);
result.setTransactionCount(count);

方式二:用注解让POJO适配数组结构(更优雅)

修改DownloadReportResponse,用@JsonFormat指定形状为数组,映射属性到数组的对应位置:

@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonFormat(shape = JsonFormat.Shape.ARRAY)
public class DownloadReportResponse {
    // 对应数组第一个元素:交易列表
    private List<TransactionsResponse> transactions;
    // 对应数组第二个元素:统计对象
    private TransactionCount transactionCount;
}

然后直接解析为该对象即可:

DownloadReportResponse result = new ObjectMapper().readValue(report, DownloadReportResponse.class);
关键注意点
  • 原解析代码中的List<DownloadReportResponse>完全错误,JSON根是单个数组,不是多个DownloadReportResponse对象的列表;
  • 确保所有字段类型和JSON值类型匹配(比如response_code是字符串,不要定义为Integer)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 22:05:16