我通过使用Sprint MVC 4.0框架暴露REST服务,我尝试遵循Odata规范的查询参数,如$ filter,$ search和$ orderBy。其中每个都包含我需要解析的表达式,构建抽象语法树并进行验证。它们都被检索为String。
我不需要Odata语法中定义的所有构造(http://docs.oasis-open.org/odata/odata/v4.0/cos01/abnf/odata-abnf-construction-rules.txt),我只选择与我的用例相关的构造(实际上很少)
我想要一些关于如何以简单的方式解析和构建抽象树的提示,如果Odata4j可以用作实用程序库来为我完成这项工作?我想避免将一堆新的依赖项拖到odata4j,因为我只会使用一小段代码。
答案 0 :(得分:1)
您当然可以使用odata4j为查询参数构建AST。我完全按照你引用的目的完成了这项工作。我拆分查询参数,然后再次拆分'&'获取参数。对于其中的每一个,我检查参数名称($ select,$ filter等),然后在此基础上使用值上相应的OptionsQueryParser静态方法,返回特定于该查询参数的数字,列表或AST。对于表达式AST,请查看PrintExpressionVisitor并将其用作编写自己的访问者以模拟AST的模式。