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

SpringBoot封装Response返回值时出现数组下标越界错误如何解决?

错误根因
  • 变量引用错误:代码中查询得到的商品集合变量名为itemCollection,但给data赋值的代码行错误引用了不存在的item变量,属于基础拼写错误。
  • 嵌套列表索引越界:getProd()返回的是当前商品下关联的产品列表,你直接复用外层循环的索引i来取产品列表的第i个元素,当产品列表为空、或长度小于等于i时,就会触发提示中的索引越界报错。
  • Response实例逻辑错误:你把Response对象的实例化放在了for循环外部,整个循环过程中只会修改同一个对象的属性,最终返回的列表中所有元素都会是最后一次循环的赋值结果,属于严重逻辑漏洞。
修复方案

首先需要确认你需要返回的data字段取值规则:如果是取当前商品下第一个产品的描述,按以下代码修复即可;如果需要返回当前商品下所有产品的描述列表,可对应调整嵌套列表的取值逻辑。

修复后参考代码:

public List<Response> getcollectionfromapi(List<String> itemids) throws Exception {
    List<Item> itemCollection = itemRepository.findById(itemids);
    Predicate<Item> nullcase = item -> item.getProduct().getName() == null;
    itemCollection.removeIf(nullcase);
    ArrayList<Response> arrayList = new ArrayList<>();
    for (int i = 0; i < itemCollection.size(); i++) {
        // 每次循环新建独立的Response实例
        Response response = new Response();
        Item currentItem = itemCollection.get(i);
        response.set_id(currentItem.get_id());
        response.setName(currentItem.getName());
        // 嵌套列表先判空再取值,避免索引越界
        List<Prod> prodList = currentItem.getProd();
        if (prodList != null && !prodList.isEmpty()) {
            // 取第一个产品的描述,如需全量描述可遍历prodList收集为列表后赋值
            response.setData(prodList.get(0).getDescription());
        } else {
            // 产品列表为空时赋值默认值,可根据业务需求调整
            response.setData("");
        }
        arrayList.add(response);
    }
    return arrayList;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:39:03