Spring集成DSL:配置仅在参数匹配

时间:2017-09-21 17:56:06

标签: spring-integration spring-integration-dsl

我正在使用Spring Integration DSL配置。是否可以添加方法引用处理程序,以便仅在消息有效内容与处理程序参数类型匹配时才调用处理程序?

例如:在以下代码中,如果有效负载为MyObject2,则Spring将在handleMessage处抛出ClassCastException。相反,我想要做的是绕过handleMessage并被handleMessage2接听。

@Bean
public IntegrationFlow myFlow() {
  return IntegrationFlows
                .from("myChannel")
                .handle(this::handleMessage)
                .handle(this::handleMessage2)
                ...
}

public MyObject2 handleMessage(MyObject o, Map headers){
...
}

public MyObject2 handleMessage(MyObject2 o, Map headers){
...
}

1 个答案:

答案 0 :(得分:1)

.handle()背后有一个技巧,它在初始阶段选择所有适当的消息处理方法,然后在运行时它执行函数:

HandlerMethod candidate = this.findHandlerMethodForParameters(parameters);

因此,为了能够根据请求消息中的payload选择此方法或该方法,您应该说.handle()来执行此操作:

  return IntegrationFlows
            .from("myChannel")
            .handle(this)
            ...

当然,在这种情况下,最好将这些方法移到单独的服务类中,以避免从这个@Configuration类中选择额外的方法。