这是对How to use SpEL to read payload and header content in a Spring Integration Router的扩展问题
项目中的技术
Spring Boot 2
Spring Integration (XML style)
Java 8
Tomcat 9.x/Liberty 19.0.0.1
作为我的Spring Integration项目的一部分(带有inbound-http-gateway的REST API,它接受XML输入并产生XML输出),这是我的问题的设置:
MyPOJO
),它是流中的有效负载。 MyPOJO
具有String属性/实例变量(例如String response
)以及getter和setter。 MyPOJO
并且设置了response
。response
内,有一个关键字/特定文字,它将确定流程的进一步过程。这就是说,是否有可能编写一个路由器(使用XML配置)来检查response
中的Message<MyPOJO>
是否包含该关键字/特定文本确定下一步去哪里?
说明性的是,像这样:
<int:router input-channel="inputChannel" expression="payload.getResponse().contains("keyword")">
<int:mapping value="true" channel="oneRoute"/>
<int:mapping value="false" channel="anotherRoute"/>
</int:router>
执行此操作并启动应用程序时,错误是:
nested exception is org.xml.sax.SAXParseException; lineNumber: 44; columnNumber: 98; Element type "int:router" must be followed by either attribute specifications, ">" or "/>"
具体地说,expression="payload.getResponse().contains("keyword")"
部分似乎有问题得到解决,这可能与keyword
周围的引号有关
对此表示任何帮助。
此致, 巴拉斯
答案 0 :(得分:2)
好。我看到您有一个XML语法错误。解决方法是这样的:
expression="payload.getResponse().contains('keyword')"
keyword
用单引号表示,而不是 double 。
这绝对是SpEL的工作方式:当您要在表达式中指定文字时,您需要使用单引号:https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions-evaluation