Apache Camel Simple语法异常:判断Map键是否在列表时报错
Apache Camel Simple语言分支逻辑语法错误解决
问题原因
你使用的in操作符语法不符合Apache Camel Simple语言的规范:
- Simple语言中
in操作符的列表必须用圆括号包裹,而非方括号 - 列表元素之间不能加空格,逗号需紧跟元素,否则会触发语法解析异常
正确解决方案
方案1:修正in操作符语法
将方括号改为圆括号,并去掉元素间的空格:
.when(simple("${body.key} in (123,456)"))
方案2:使用Java表达式替代(更直观)
如果对Simple语言语法不熟悉,直接用Java表达式实现分支判断更不易出错:
import java.util.Arrays; // ... .when(exchange -> { Integer key = (Integer) exchange.getIn().getBody(Map.class).get("key"); return Arrays.asList(123, 456).contains(key); })
方案3:使用contains的正确姿势
若要使用contains,需将目标列表放入Exchange属性或直接构建集合,再检查包含关系:
// 先将列表存入Exchange属性 .setProperty("targetKeys", constant(Arrays.asList(123, 456))) // 再用contains判断 .when(simple("${exchangeProperty.targetKeys} contains ${body.key}"))
内容的提问来源于stack exchange,提问作者Conor-A McMeel
相关产品推荐
相关产品推荐

