【问题标题】:jirutka/rsql-parser : How to define an operator that has no argument? (=empty=, =notEmpty=)jirutka/rsql-parser : 如何定义一个没有参数的操作符? (=空=, =notEmpty=)
【发布时间】:2016-06-09 15:44:13
【问题描述】:

我定义了两个新的自定义运算符,分别命名为 =empty==notEmpty=,就像我以前一样。

public abstract class RsqlParserOperators extends RSQLOperators {
...
    public static final ComparisonOperator LIKE = new ComparisonOperator("=like=", true);
...
    public static final ComparisonOperator EMPTY = new ComparisonOperator("=empty=", false);
    public static final ComparisonOperator NOT_EMPTY = new ComparisonOperator("=notEmpty=", false);

    public static Set<ComparisonOperator> operators() {
        Set<ComparisonOperator> set = defaultOperators();
...
        set.add(LIKE);
...
        set.add(EMPTY);
        set.add(NOT_EMPTY);
        return set;
    }
}

这些新运算符的特殊之处在于它们不需要参数。

当我尝试使用其中一个时,例如使用像 serie=empty= 这样的过滤器时,我最终遇到了以下异常。

cz.jirutka.rsql.parser.ParseException: Encountered "<EOF>" at line 1, column 12.
Was expecting one of:
    <UNRESERVED_STR> ...
    <SINGLE_QUOTED_STR> ...
    <DOUBLE_QUOTED_STR> ...
    "(" ...

关于如何定义无参数运算符的任何想法?

谢谢。

【问题讨论】:

    标签: java rest search-engine


    【解决方案1】:

    我遇到了完全相同的问题,最终创建了一个名为 IS_EMPTY 的新 ComparisonOperator。

    public static final ComparisonOperator IS_EMPTY = new ComparisonOperator("=isEmpty=", false);
    

    它只接受一个真假参数

    final Node rootNode = new RSQLParser(RsqlParserOperators.operators()).parse("subEntity=isEmpty=true");   
    

    当然,您仍然需要在转换器中将参数从字符串转换为布尔值。

    【讨论】:

      【解决方案2】:

      RSQL grammar 不允许无参数比较。

      比较由选择器、运算符和参数组成。

      comparison     = selector, comparison-op, arguments;
      

      我不确定允许空参数是否是个好主意,但我会考虑一下。

      您可以定义一个特殊的参数来代替自定义运算符,例如null,并在您的转换器中处理它。

      【讨论】:

        猜你喜欢
        • 2014-12-16
        • 2015-07-06
        • 1970-01-01
        • 2013-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多