首页 文章

Spring集成DSL:配置仅在参数匹配时处理的处理程序

提问于
浏览
2

我正在使用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 回答

  • 1

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

    HandlerMethod candidate = this.findHandlerMethodForParameters(parameters);
    

    因此,为了能够从请求消息中获取基于 payload 的这个或那个方法,你应该说 .handle() 来做到这一点:

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

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

相关问题