Spring | SPEL 多个 属性 访问器
Spring | SPEL multiple property accessors
我正在尝试将 SPeL 与多个 属性 访问器一起使用。
StandardEvaluationContext simpleContext = new StandardEvaluationContext(myPojo);
simpleContext.setVariable("ctx", ruleExecutionContext);
simpleContext.setPropertyAccessors(Arrays.asList(new MapAccessor(), new ReflectivePropertyAccessor()));
ExpressionParser parser = new SpelExpressionParser();
return (Boolean) parser.parseExpression(spelExpression).getValue(simpleContext, RulebaseConfiguration.LIB_MAP);
RulebaseConfiguration.LIB_MAP 包含 {"instanceName": instance}
我想传递可以在 POJO 上运行的表达式以及在实例上调用方法。但是只把map带进去效果。
我收到这个错误:
SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'payload' cannot be found on object of type 'java.util.HashMap' - maybe not public?] with root cause
org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'payload' cannot be found on object of type 'java.util.HashMap' - maybe not public?
at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:226)
为每个请求创建上下文并解析表达式是一种浪费,除非每个请求都不同;在这种情况下,考虑缓存 expressions/contexts.
正如我所说,由于您将 rootObject
传递给 getValue()
,因此您的 myPojo
是 "hidden" - 始终执行评估LIB_MAP
.
您需要在没有根对象的情况下调用 getValue()
才能使用上下文的根对象。您可以添加 LIB_MAP
作为变量(例如名称 nationalityLookup
)并使用
payload['channel'] == #nationalityLookup.resolveChannel('CBR1000')
我正在尝试将 SPeL 与多个 属性 访问器一起使用。
StandardEvaluationContext simpleContext = new StandardEvaluationContext(myPojo);
simpleContext.setVariable("ctx", ruleExecutionContext);
simpleContext.setPropertyAccessors(Arrays.asList(new MapAccessor(), new ReflectivePropertyAccessor()));
ExpressionParser parser = new SpelExpressionParser();
return (Boolean) parser.parseExpression(spelExpression).getValue(simpleContext, RulebaseConfiguration.LIB_MAP);
RulebaseConfiguration.LIB_MAP 包含 {"instanceName": instance}
我想传递可以在 POJO 上运行的表达式以及在实例上调用方法。但是只把map带进去效果。
我收到这个错误:
SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'payload' cannot be found on object of type 'java.util.HashMap' - maybe not public?] with root cause
org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'payload' cannot be found on object of type 'java.util.HashMap' - maybe not public?
at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:226)
为每个请求创建上下文并解析表达式是一种浪费,除非每个请求都不同;在这种情况下,考虑缓存 expressions/contexts.
正如我所说,由于您将
rootObject
传递给getValue()
,因此您的myPojo
是 "hidden" - 始终执行评估LIB_MAP
.
您需要在没有根对象的情况下调用 getValue()
才能使用上下文的根对象。您可以添加 LIB_MAP
作为变量(例如名称 nationalityLookup
)并使用
payload['channel'] == #nationalityLookup.resolveChannel('CBR1000')