Java Spring集成-如何使用SpEL在注释库上过滤消息?
我阅读了Spring集成参考页上基于xml的配置:Java Spring集成-如何使用SpEL在注释库上过滤消息?,java,filter,annotations,spring-integration,spring-el,Java,Filter,Annotations,Spring Integration,Spring El,我阅读了Spring集成参考页上基于xml的配置: <filter expression="#jsonPath(payload,'$..book[2].isbn') matches '\d-\d{3}-\d{5}-\d'"/> 基于注释的等价性是什么?因此,我可以使用SpEL作为逻辑来过滤消息 谢谢。您可以使用Java DSL @Bean public IntegrationFlow filteringFlow() { return IntegrationFlows.f
<filter expression="#jsonPath(payload,'$..book[2].isbn') matches '\d-\d{3}-\d{5}-\d'"/>
基于注释的等价性是什么?因此,我可以使用SpEL作为逻辑来过滤消息
谢谢。您可以使用Java DSL
@Bean
public IntegrationFlow filteringFlow() {
return IntegrationFlows.from("someChannel")
.filter("#jsonPath(...) matches ...")
.channel("outChannel")
.get();
}
或者用bean配置它
@Bean
@ServiceActivator(inputChannel = "someChannel")
public MessageHandler filter() {
MessageFilter filter = new MessageFilter(selector());
filter.setOutputChannelName("outChannel");
return filter;
}
@Bean
public MessageSelector selector() {
return new ExpressionEvaluatingSelector("#jsonPath(...) matches ...");
}
您可以使用JavaDSL
@Bean
public IntegrationFlow filteringFlow() {
return IntegrationFlows.from("someChannel")
.filter("#jsonPath(...) matches ...")
.channel("outChannel")
.get();
}
或者用bean配置它
@Bean
@ServiceActivator(inputChannel = "someChannel")
public MessageHandler filter() {
MessageFilter filter = new MessageFilter(selector());
filter.setOutputChannelName("outChannel");
return filter;
}
@Bean
public MessageSelector selector() {
return new ExpressionEvaluatingSelector("#jsonPath(...) matches ...");
}
对于Java,您可以在POJO方法上使用
@Filter
,该方法直接调用JsonPathUtils.evaluate()
,并对来自JsonPathUtils的结果执行所需的匹配()。请原谅我的无知,如果选择bean配置,我应该在jsonPath(…)中放什么?逻辑上是消息的有效负载/报头。那么过滤器是否会获取所有消息或过滤消息(理想情况下是后者)并用作普通的消息处理程序?与使用XML相同,但正如@ArtemBilan所说,您可以直接从Java调用JsonPathUtils
(并使用模式
将结果与某些正则表达式匹配)。对于Java,您可以在POJO方法上使用@Filter
,该方法直接调用JsonPathUtils.evaluate()
,并对来自JsonPathUtils的结果执行所需的匹配()。请原谅我的无知,如果选择bean配置,我应该在jsonPath(…)中放什么?逻辑上是消息的有效负载/报头。然后,过滤器是否会获取所有消息或过滤消息(理想情况下是后者)并用作普通的消息处理程序?与使用XML相同,但正如@ArtemBilan所说,您可以直接从Java调用JsonPathUtils
(并使用模式
将结果与某些正则表达式匹配)。