单独传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头和客户数据,但保留原始参数顺序与编码形式。