分页参数校验与 CRUD 结果反馈

zjc 于 2026-08-20 发布

分页接口最常见的滥用是 size=100000。一次请求就能把数据库和内存打出压力。项目对分页参数加了明确边界,并统一了新增、修改、删除的结果反馈。

一、参数边界

@Min(value = 1, message = "当前页码必须从1开始")
@RequestParam(defaultValue = "1") long current,

@Min(value = 1, message = "每页条数不能小于1")
@Max(value = 100, message = "每页条数不能超过100")
@RequestParam(defaultValue = "10") long size

https://github.com/springvortex/spring-cloud-alibaba/blob/release/v1.0.0/service-provider/src/main/java/com/zjc/provider/controller/UserController.java

Controller 标注 @Validated 后,这些单参数约束才会生效。

二、非法值在入口拦截

current=0size=9999 会进入参数校验异常,由全局异常处理器返回错误信息,不会触达数据库。

三、Entity 分页转换为 DTO 分页

项目先查询 Page<Entity>,再重建 Page<DTO>,保留 current、size、total,并转换 records。对外接口不暴露 Entity,也不把分页结构手工改散。

四、更新删除要反馈结果

更新成功:success=true
更新失败:code=102,资源不存在
删除成功:success=true
删除失败:code=102,资源不存在

不要所有情况都返回成功,让前端猜数据有没有变化。

五、经验总结

分页默认值提供便利,上限保护系统;CRUD 返回值表达真实结果。这三个小细节都直接影响接口可用性。