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
相关产品推荐
相关产品推荐

