And*_*sun 3 java dsl lambda spring spring-integration
我试图通过lambda表达式创建消息过滤器,以基于标头值评估过滤消息
IntegrationFlows.from(inputChannel())
.filter((Message<?> m) -> { return m.getHeaders().get(...)...; })
.transform(...)
.channel(outputChannel())
.get();
Run Code Online (Sandbox Code Playgroud)
但有例外
Caused by: java.lang.ClassCastException: com.<...skipped...>.BusinessPayloadData cannot be cast to org.springframework.messaging.Message
只有这个定义对我有用
IntegrationFlows.from(inputChannel())
.filter(new MessageSelector(){
@Override
public boolean accept(Message<?>message){
return ...;
}
})
.transform(...)
.channel(outputChannel())
.get();
Run Code Online (Sandbox Code Playgroud)
是否可以MessageSelector通过lambda表达式创建实例?
像这样:
.filter(Message.class, m -> m.getHeaders().get(...)...)
Run Code Online (Sandbox Code Playgroud)
还有另一种重载的方法可以推断目标方法调用的对象类型。
参见LambdaMessageProcessor源代码。由于我们无法直接从Lambda推断参数类型,因此需要Java:使用lambda参数获取泛型方法的实际类型,因此我们必须像使用另一个顶级类型参数那样进行操作。
否则,它只能以结束Object,目标方法调用将其视为的类型payload。
| 归档时间: |
|
| 查看次数: |
2035 次 |
| 最近记录: |