Spring Integration Router 中的 SpEL 可以使用 Java 的 String 类方法吗



这是如何使用 SpEL 读取 Spring 集成路由器中的有效负载和标头内容的扩展问题

我的项目中的技术

Spring Boot 2
Spring Integration (XML style)
Java 8
Tomcat 9.x/Liberty 19.0.0.1

作为我的 Spring 集成项目(带有入站 http-gateway 的 REST API,它接受 XML 输入并生成 XML 输出)的一部分,这是我问题的设置:

  • 有一个基于构建器模式的 Java 对象(例如,MyPOJO),它是流中的有效负载。
  • MyPOJO有一个字符串属性/实例变量(比如String response)以及一个getter和setter。
  • 在流程中的某个地方,MyPOJO被构建并response被设置。
  • response中,有一个关键字/特定的文本片段将决定流程的进一步过程。

也就是说,是否可以编写一个路由器(使用XML配置)来检查Message<MyPOJO>内部的response是否包含该关键字/特定文本,以确定下一步要去哪里?

举例来说,像这样:

<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周围的引号有关

非常感谢对此的任何帮助。

真诚地 巴拉特

好的。我看到您有一个 XML 语法错误。修复程序如下所示:

expression="payload.getResponse().contains('keyword')"

keyword单引号,而不是双引号。

这绝对是 SpEL 的工作方式:当您想在表达式中指定文本时,您需要使用单引号:https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions-evaluation

相关内容

  • 没有找到相关文章

最新更新