Spring 集成 DSL:配置仅在参数匹配时处理的处理程序
Spring integration DSL: configure handler that handles only when the argument matches
我正在使用 Spring 集成 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){
...
}
.handle()
背后有一个技巧,它会在初始化阶段选择所有适当的消息处理方法,然后在运行时执行以下功能:
HandlerMethod candidate = this.findHandlerMethodForParameters(parameters);
因此,为了能够根据请求消息中的 payload
选择这个或那个方法,您应该说 .handle()
来做到这一点:
return IntegrationFlows
.from("myChannel")
.handle(this)
...
当然,在这种情况下,最好将这些方法移动到单独的服务 class 以避免从此 @Configuration
class.[=16= 中选择额外的方法]
我正在使用 Spring 集成 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){
...
}
.handle()
背后有一个技巧,它会在初始化阶段选择所有适当的消息处理方法,然后在运行时执行以下功能:
HandlerMethod candidate = this.findHandlerMethodForParameters(parameters);
因此,为了能够根据请求消息中的 payload
选择这个或那个方法,您应该说 .handle()
来做到这一点:
return IntegrationFlows
.from("myChannel")
.handle(this)
...
当然,在这种情况下,最好将这些方法移动到单独的服务 class 以避免从此 @Configuration
class.[=16= 中选择额外的方法]