Matchexchange-My接口在客户端没有传递per_page字段时,每页条数错误显示为1而不是默认的20条。
通过查看日志发现:
{"page":{"page":"1"}} - 只传了页码,没有传per_page字段"perPage":"1" - 每页条数显示为1而不是预期的20在MyHandler.php中的分页参数处理逻辑:
// 解析分页参数
$pageNum = $page ? $page->getPage() : 1;
$pageSize = $page ? $page->getPerPage() : 20;
// 限制分页大小,确保不为0
$pageSize = max(min($pageSize, 100), 1);
当客户端传了page对象但没有传per_page字段时:
$page->getPerPage()返回protobuf的默认值0max(min(0, 100), 1)处理后变成1修改分页参数处理逻辑,当per_page为0时明确使用默认值20:
// 解析分页参数
$pageNum = $page ? $page->getPage() : 1;
$pageSize = $page ? $page->getPerPage() : 20;
// 限制分页大小,确保不为0
$pageSize = max(min($pageSize, 100), 1);
$pageNum = max($pageNum, 1);
// 解析分页参数
$pageNum = $page ? $page->getPage() : 1;
$pageSize = $page ? $page->getPerPage() : 20;
// 当per_page为0时使用默认值20(protobuf未传该字段时返回0)
if ($pageSize <= 0) {
$pageSize = 20;
}
// 限制分页大小
$pageSize = min($pageSize, 100);
$pageNum = max($pageNum, 1);
使用重放命令验证修复效果:
php artisan debug:reproduce-error request_1750409477275
app/Module/AppGame/Handler/Matchexchange/MyHandler.php修复Matchexchange-My接口分页参数问题
- 修复当客户端未传per_page字段时,每页条数错误显示为1的问题
- 当protobuf的per_page字段为0时,正确使用默认值20
- 确保分页逻辑符合预期,避免数据显示不完整
这个问题可能在其他使用类似分页逻辑的Handler中也存在,建议后续检查其他接口的分页参数处理逻辑。