3

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

例如:在下面的代码中,如果 payload 是MyObject2,Spring 会在 处抛出 ClassCastException handleMessage。相反,我想做的是绕过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){
...
}
4

1 回答 1

1

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

HandlerMethod candidate = this.findHandlerMethodForParameters(parameters);

因此,为了能够根据payload请求消息中的 获取这个或那个方法,你应该说.handle()这样做:

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

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

于 2017-09-21T18:08:02.470 回答