Spring Integration Router 中的 SpEL 可以使用 Java 的字符串 class 方法吗
Can SpEL in Spring Integration Router use Java's String class methods
这是
的扩展问题
我项目中的技术
Spring Boot 2
Spring Integration (XML style)
Java 8
Tomcat 9.x/Liberty 19.0.0.1
作为我的 Spring 集成项目的一部分(REST API 带有入站 http 网关,需要一个 XML 输入并产生一个 XML 输出),这是我的问题的设置:
- 有一个基于构建器模式的 Java 对象(例如,
MyPOJO
),它是流中的有效负载。
MyPOJO
有一个字符串 property/instance 变量(比如,String response
)以及一个 getter 和 setter。
- 流程中的某处,
MyPOJO
已构建,response
已设置。
- 在
response
里面,有keyword/specific一段文字,它将决定流程的进一步进程。
这就是说,是否可以编写一个路由器(使用 XML 配置)来检查 Message<MyPOJO>
中的 response
是否包含 keyword/specific 一段文字 来确定下一步去哪里?
举例来说,是这样的:
<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
这是
我项目中的技术
Spring Boot 2
Spring Integration (XML style)
Java 8
Tomcat 9.x/Liberty 19.0.0.1
作为我的 Spring 集成项目的一部分(REST API 带有入站 http 网关,需要一个 XML 输入并产生一个 XML 输出),这是我的问题的设置:
- 有一个基于构建器模式的 Java 对象(例如,
MyPOJO
),它是流中的有效负载。 MyPOJO
有一个字符串 property/instance 变量(比如,String response
)以及一个 getter 和 setter。- 流程中的某处,
MyPOJO
已构建,response
已设置。 - 在
response
里面,有keyword/specific一段文字,它将决定流程的进一步进程。
这就是说,是否可以编写一个路由器(使用 XML 配置)来检查 Message<MyPOJO>
中的 response
是否包含 keyword/specific 一段文字 来确定下一步去哪里?
举例来说,是这样的:
<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