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

Spring Boot中如何处理请求参数中的重复键问题

Spring Boot处理重复page参数的两种实现方案

方案一:取最后一个page参数值

直接通过列表接收重复参数,提取最后一个值作为有效分页页码,不影响原有单一参数的请求逻辑:

  • 接口方法中用List<Integer>类型接收page参数,Spring会自动将多个同名称参数封装为列表
  • 从列表中取出最后一个元素作为实际使用的页码
  • 示例代码:
@GetMapping("/api/projects")
public ResponseEntity<List<Project>> getProjects(@RequestParam List<Integer> page) {
    // 提取最后一个page值作为有效页码
    Integer validPage = page.get(page.size() - 1);
    // 构建分页请求(注意Spring Data的Pageable页码从0开始,需根据业务调整)
    Pageable pageable = PageRequest.of(validPage - 1, 10); // 10为默认页大小,可自定义
    Page<Project> projectPage = projectRepository.findAll(pageable);
    return ResponseEntity.ok(projectPage.getContent());
}

方案二:重复参数直接返回错误

如果需要严格禁止重复参数,可在接收后判断列表长度,超出则返回400错误:

  • 同样用List<Integer>接收page参数
  • 检查列表大小,若大于1则直接返回非法请求响应,或抛出自定义异常
  • 示例代码:
@GetMapping("/api/projects")
public ResponseEntity<?> getProjects(@RequestParam List<Integer> page) {
    if (page.size() > 1) {
        // 返回400错误及提示信息
        return ResponseEntity.badRequest().body("不允许传入重复的page参数");
    }
    Integer validPage = page.get(0);
    Pageable pageable = PageRequest.of(validPage - 1, 10);
    Page<Project> projectPage = projectRepository.findAll(pageable);
    return ResponseEntity.ok(projectPage.getContent());
}

补充说明

如果之前使用Spring Data自动注入的Pageable参数,只需替换为手动接收page参数再构建Pageable即可,无需改动底层分页逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:06:38