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

Spring分页查询报Index 16 out of bounds for length 10异常解决

错误原因

报错java.lang.IndexOutOfBoundsException: Index 16 out of bounds for length 10的直接触发点是Controller里的测试日志代码:
你的分页配置默认每页查询10条数据,SQL层通过limit限制了每次最多返回10条记录,因此查询得到的boardList集合长度最多为10,合法索引范围是0~9。代码中硬编码调用boardList.get(16)访问索引为16的元素,超出了集合的实际长度,直接触发越界错误。

除此之外代码里还存在3个会影响分页功能正常运行的隐藏问题:

  1. 同一个请求里重复调用两次service.getBoardListAll查库,浪费数据库性能
  2. MyBatis ResultMap映射配置错误:一对一关联错用了一对多的collection标签,非主键字段错用了主键专属的id标签,会导致查询结果被错误合并,返回的列表长度和预期不符
  3. 帖子总数查询没有加社团ID过滤条件,后续计算分页页码时总数统计错误
修复步骤
  • 移除非法的测试代码
    直接删除Controller里的硬编码测试日志行:
    log.info("@@@@@@@@@@@@"+boardList.get(16)+"");
    
    如果需要调试打印列表内容,可以遍历集合输出,或者打印集合长度、合法索引范围内的元素,访问索引前最好先判断集合是否为空,避免空指针。
  • 消除重复查库
    已经把查询结果存到了boardList变量里,传给model的时候直接用这个变量即可,不需要再调用一次service查询:
    // 把原来的model.addAttribute("boardList", service.getBoardListAll(club_no, cri));替换成下面这行
    model.addAttribute("boardList", boardList);
    
  • 修正MyBatis ResultMap配置
    首先把非主键字段的映射标签从<id>改成<result>,<id>标签仅用于标记主键字段,供MyBatis判断数据重复;其次把一对一的对象关联从<collection>(一对多集合映射专用)改成<association>(单对象关联专用),修正后的配置参考:
    <resultMap type="MembersVo" id="membersMap">
       <id property="member_no" column="member_no"/>
       <result property="member_email" column="member_email"/>
       <result property="member_pass" column="member_pass"/>
       <result property="member_name" column="member_name"/>
       <result property="member_location" column="member_location"/>
       <result property="member_tel" column="member_tel"/>
       <result property="member_image" column="member_image"/>
       <result property="member_regdate" column="member_regdate"/>
       <result property="member_updatedate" column="member_updatedate"/>
       <result property="member_authority" column="member_authority"/>
       <result property="member_signup_type" column="member_signup_type"/>
       <result property="member_status" column="member_status"/>
       <result property="member_role" column="member_role"/>
       <result property="member_type" column="member_type"/>
    </resultMap>
    
    <resultMap type="ClubBoardsVo" id="clubBoardsMap">
        <id property="club_board_no" column="club_board_no"/>
        <result property="club_no" column="club_no"/>
        <result property="board_type_no" column="board_type_no"/>
        <result property="member_no" column="member_no"/>
        <result property="club_board_title" column="club_board_title"/>
        <result property="club_board_content" column="club_board_content"/>
        <result property="club_board_image" column="club_board_image"/>
        <result property="club_board_date" column="club_board_date"/>
        <result property="club_board_updatedate" column="club_board_updatedate"/>
        <result property="club_board_likecnt" column="club_board_likecnt"/>
        <result property="club_board_commentcnt" column="club_board_commentcnt"/>
    </resultMap>
    
    <resultMap type="BoardTotalBean" id="boardListMap">
        <association property="membersVo" resultMap="membersMap"/>
        <association property="clubBoardsVo" resultMap="clubBoardsMap" />
    </resultMap>
    
  • 修正总数查询逻辑
    当前的总数查询没有加club_no过滤,统计的是全平台所有帖子的数量,不是当前访问社团下的帖子数,后续做分页导航栏的时候页码计算会出错,修改SQL加上过滤条件即可:
    <select id="totalBoardCnt" resultType="java.lang.Integer">
        select count(club_board_no) from club_boards where club_no = #{club_no}
    </select>
    
    对应DAO层调用的时候记得把club_no参数一并传入总数查询的方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:54:33