gpt4 book ai didi

java - OData 服务器 API 和表达式语法、文字和成员

转载 作者:行者123 更新时间:2023-11-30 05:38:12 26 4
gpt4 key购买 nike

我希望将 OData 查询转换为 MongoDB 查询。我有 olingo-odata4 代码,并隔离了获取输入字符串所需的调用,例如

Name eq 'Buzz' and (amount gt 1.99 or size lt 10) 

并使用我自己的 ExpressionVisitor 实现通过 ExpressionParser 运行它,以拦截各种解析状态,例如 visitLiteralvisitBinaryOperator > 等。从这里构建等效的 MongoDB 查询就很简单了。我的 main 本质上是 odata 测试驱动程序的精简副本,包括用于启动的 Edm 类的模拟:

ExpressionParser ep = new ExpressionParser(mock(Edm.class), odata);

我的挑战是我似乎无法正确设置解析器识别字段的环境,例如成员。我本希望 Name eq 'Buzz' 会导致为 Name 调用 visitMember 方法,但事实并非如此;相反,我收到解析失败并显示以下消息:属性路径必须遵循结构化类型

所以我的总体问题是:如果 OData 的 $filter 参数将表达式语法显示为 Name eq 'Buzz' 那么服务器实现中必须发生什么识别姓名为成员(member)?

最佳答案

不幸的是,解析器与数据模型耦合得太紧密,恕我直言。我查看的测试驱动程序大多是 {5 eq 5} 之类的东西,所以我被引入了歧途。然而,属性路径测试驱动程序无法模拟 EDM;它必须构造一个模型才能声明字段的类型(字符串等)。这就是为什么 visitMember Member 类具有 getType() 方法。但这意味着您不能使用解析器来破解语法并对结果动态执行操作。

我最终只是在 ANTLR 中创建了一个非常小的语法来解析 OData 查询表达式,并且很容易转换为 MongoDB 查询语言。

关于java - OData 服务器 API 和表达式语法、文字和成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56226401/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com