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

问题描述 投票:0回答:1

这是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项目的一部分(带有入站http-gateway的REST API,它接受XML输入并生成XML输出),这是我的问题的设置:

  • 有一个基于Builder模式的Java对象(比如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周围的引号有关

非常感谢任何帮助。

真诚的,巴拉特

spring-integration spring-integration-dsl spring-integration-http
1个回答
2
投票

好。我看到你有一个XML语法错误。修复是这样的:

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.