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

RestTemplate调用接口反序列化对象列表报错:无法将数组转为BankingList类型

错误根本原因

你的BankingClient接口直接返回List<Banking>,序列化后是JSON数组结构(开头为[),但你在AccountClient里用BankingList类作为响应类型接收,BankingList是Java对象,对应的JSON结构为对象格式(开头为{,内部包含list字段),两者结构完全不匹配,Jackson无法把数组反序列化为对象,因此抛出该错误。
另外你原有代码逻辑存在小问题:循环遍历账户列表时,每次请求的结果直接覆盖了b变量,最终只会返回最后一个账户的交易记录,不会合并所有账户的交易。

解决方案1:修改AccountClient的接收逻辑(无需修改BankingClient代码)

用ParameterizedTypeReference指定接收List<Banking>类型,再手动把结果合并到BankingList中:

@GetMapping("/listofTrans/{cid}")
public BankingList getTrans(@PathVariable Integer cid) {
    List<Account> a = acc.getByCid(cid);
    BankingList b = new BankingList();
    // 初始化list避免空指针
    b.setList(new ArrayList<>());
    for(Account a1:a) {
        // 用ParameterizedTypeReference接收泛型List
        ResponseEntity<List<Banking>> response = restTemplate.exchange(
            "http://BankingClient/banking/"+a1.getAno(),
            HttpMethod.GET,
            null,
            new ParameterizedTypeReference<List<Banking>>() {}
        );
        List<Banking> transList = response.getBody();
        if(transList != null) {
            // 把当前账户的交易添加到总列表
            b.getList().addAll(transList);
        }
    }
    return b;
}

解决方案2:修改BankingClient的返回结构(和你定义的BankingList匹配)

把BankingClient的接口返回值改成BankingList类型,将查询到的交易列表封装进去:

@GetMapping("/{ano}")
public BankingList getTrans(@PathVariable Integer ano) {
    BankingList bankingList = new BankingList();
    bankingList.setList(service.getTrans(ano));
    return bankingList;
}

同时修正你原有BankingList类的语法错误,public List<Banking> list后缺少分号,建议调整为符合POJO规范的写法:

public class BankingList {
    private List<Banking> list;
    public List<Banking> getList() {
        return list;
    }
    public void setList(List<Banking> list) {
        this.list = list;
    }   
}

任选一个方案即可解决反序列化错误,优先推荐方案1,无需改动接口提供方的服务代码,适配性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:27:03