尝试使用Java将OData$筛选器解析为其名称-值对

尝试使用Java将OData$筛选器解析为其名称-值对,java,filter,odata,Java,Filter,Odata,我正在构建一个服务,它将使用OData语法(而不是更熟悉的语法)接收其“查询参数” ?品牌=本田&车型=Pilot&trimline=LX 要求接受传递的单个OData筛选器“$filter” ?$filter=“'make'eq'Honda'和'model'eq'Pilot'和'trimline'eq'LX'” 不需要考虑SQL查询映射、JDBC、到JSON的转换等。这实际上是试图从该语法中仅获取名称-值对集。我正在研究Olingo库,看到了FilterExpression和UriParser

我正在构建一个服务,它将使用OData语法(而不是更熟悉的语法)接收其“查询参数”

?品牌=本田&车型=Pilot&trimline=LX

要求接受传递的单个OData筛选器“$filter”

?$filter=“'make'eq'Honda'和'model'eq'Pilot'和'trimline'eq'LX'”

不需要考虑SQL查询映射、JDBC、到JSON的转换等。这实际上是试图从该语法中仅获取名称-值对集。我正在研究Olingo库,看到了FilterExpression和UriParser之类的东西,但这似乎过于复杂了。我错过什么了吗

$filter字符串在所有情况下都只具有“eq”运算符

我假设有一个更简单的方法来做这件事。我希望Olingo库中有什么东西可以让我得到所描述的$filter,并最终得到一个HashMap


谢谢

不幸的是,Olingo不提供此功能。为了使用Olingo解析筛选器字符串,您至少需要一个EdmEntityType。然后您可以像这样调用parseFilter方法UriParser.parseFilter(null,entityType,filterString)


如果只需要“eq”参数,为什么不使用String.split()方法在字符串“eq”处进行拆分,以获得所需的段。我在eq前后加上空格,以防止spilt方法将有效的过滤器(如$filter=Name eq'Equador')拆分为4段而不是3段。您甚至可以将split方法与正则表达式一起使用,这比我的简单示例更复杂。

感谢@chrisam的输入。说到你的观点。。。我们最终使用了正则表达式,并放弃了对ODATA库的所有使用。。。对于我们的案子来说,他们太过分了。