问题描述
列表筛选时,浏览器请求的 filters 参数为 JSON 数组 AST 格式(如:["and", ["priority", "=", "high"], ["status", "=", "active"]]),服务端接收到参数后,并未按照 spec 规范转换为正确的 FilterCondition(对象)格式,导致服务端未对数据进行筛选,返回了全部记录。
复现步骤
- 在 ObjectUI 列表页面进行多条件筛选(如按照 priority=high 且 status=active)。
- 浏览器发出的请求如:
GET /api/v1/data/contact?top=100&sort=name&filters=["and",["priority","=","high"],["status","=","active"]]
- 服务端收到后,最终在
findData 处理时,仅做了 JSON.parse,但未将 AST 数组格式转换为 FilterCondition 对象格式,导致 filter 永远无法生效。
期望行为
- 服务端能够识别 filters 为 AST (数组)格式时,自动转换为符合 FilterCondition 对象结构,传给底层查询引擎。
- 筛选条件能准确生效,返回预期的结果集。
建议修复点
- 建议在
packages/objectql/src/protocol.ts 的 findData 方法里处理 filters,如果解析后为数组 AST,自动转换为 { $and: [...] } 结构传递。 - 并在 Dispatcher 层需保证参数在整个链路中以规范形式传递(不要丢失/多包一层)。
参考
如需英文描述请告知。
问题描述
列表筛选时,浏览器请求的
filters参数为 JSON 数组 AST 格式(如:["and", ["priority", "=", "high"], ["status", "=", "active"]]),服务端接收到参数后,并未按照 spec 规范转换为正确的 FilterCondition(对象)格式,导致服务端未对数据进行筛选,返回了全部记录。复现步骤
findData处理时,仅做了JSON.parse,但未将 AST 数组格式转换为 FilterCondition 对象格式,导致 filter 永远无法生效。期望行为
建议修复点
packages/objectql/src/protocol.ts的findData方法里处理 filters,如果解析后为数组 AST,自动转换为{ $and: [...] }结构传递。参考
如需英文描述请告知。