【问题标题】:Looping and evaulating with SpEL使用 SpEL 循环和评估
【发布时间】:2020-10-28 17:50:36
【问题描述】:

首先,请考虑我作为开发人员和 Spring 用户的初学者。 我正在寻找解决这个问题的方法:

有一个由 JsonNode 对象填充的给定列表,称为属性。我必须找到哪个是针对给定的布尔表达式评估 true 的。我想在上下文中注册一个集合,对其进行迭代并查找是否有任何属性使用 SpEl 评估为真,因此我不必每次都进行这种非常昂贵的上下文创建。

您知道如何更快地做到这一点吗? (代码是虚拟的。问题是真实的。)

//given
List<JsonNode> attributes;

attributes
    .stream()
    .anyMatch(attribute -> {
        ExpressionParser parser = new SpelExpressionParser();
        Expression exp = parser.parseExpression("attribute.name == 'John Doe'");
        EvaluationContext ctx = new StandardEvaluationContext(attribute);
        return exp.getValue(ctx, Boolean.class);
    });

感谢您的帮助!

【问题讨论】:

    标签: java spring spring-boot spring-el


    【解决方案1】:

    您不需要为每个元素解析和构建上下文;您可以将根对象传递给getValue()

    解析一次表达式并改用getValue(context, attribute, Boolean.class)

    除非您需要自定义上下文,否则您甚至不需要。

    getValue(attribute, Boolean.class)
    

    【讨论】:

      猜你喜欢
      • 2018-09-01
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多