分页接口最常见的滥用是 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
Controller 标注 @Validated 后,这些单参数约束才会生效。
二、非法值在入口拦截
current=0、size=9999 会进入参数校验异常,由全局异常处理器返回错误信息,不会触达数据库。
三、Entity 分页转换为 DTO 分页
项目先查询 Page<Entity>,再重建 Page<DTO>,保留 current、size、total,并转换 records。对外接口不暴露 Entity,也不把分页结构手工改散。
四、更新删除要反馈结果
更新成功:success=true
更新失败:code=102,资源不存在
删除成功:success=true
删除失败:code=102,资源不存在
不要所有情况都返回成功,让前端猜数据有没有变化。
五、经验总结
分页默认值提供便利,上限保护系统;CRUD 返回值表达真实结果。这三个小细节都直接影响接口可用性。