Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring集成-如何使用SpEL在注释库上过滤消息?_Java_Filter_Annotations_Spring Integration_Spring El - Fatal编程技术网

Java Spring集成-如何使用SpEL在注释库上过滤消息?

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

我阅读了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.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
(并使用
模式
将结果与某些正则表达式匹配)。