单独传searchCriteria能过滤,加入fields精简响应后却返回全部记录。问题通常出在查询字符串结构,不是Repository突然忽略过滤器。
处理步骤
步骤1:从服务器access log复制实际收到的完整query string,对比客户端发送内容。重点检查第一个参数后是否使用&,方括号是否被HTTP库二次编码。
步骤2:fields只描述返回结构,例如items[sku,name],total_count;searchCriteria仍是独立顶级参数。不要把&searchCriteria拼进fields值,也不要对整条URL一次urlencode。
步骤3:用curl的--get与--data-urlencode分别传参数,确认服务端解析结果。若curl正常、SDK异常,修复SDK的query builder而不是改Magento Repository。
步骤4:自定义接口还要确认方法参数名为searchCriteria且类型是SearchCriteriaInterface;实现层调用getList时必须传入收到的对象。
命令与数据检查
curl --get 'https://shop.example/rest/V1/products' --data-urlencode 'searchCriteria[filter_groups][0][filters][0][field]=status' --data-urlencode 'searchCriteria[filter_groups][0][filters][0][value]=1' --data-urlencode 'searchCriteria[filter_groups][0][filters][0][condition_type]=eq' --data-urlencode 'fields=items[sku,name,status],total_count'上线前验证
确认total_count与不带fields时一致,items只保留指定字段;再测试空结果、第二页以及包含空格和加号的过滤值。
记录请求时隐藏Authorization头和客户数据,但保留原始参数顺序与编码形式。

