【发布时间】:2016-08-13 19:07:35
【问题描述】:
我尝试通过 lambda 表达式创建消息过滤器,以根据标头值评估过滤消息
IntegrationFlows.from(inputChannel())
.filter((Message<?> m) -> { return m.getHeaders().get(...)...; })
.transform(...)
.channel(outputChannel())
.get();
但有异常
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();
是否可以通过 lambda 表达式创建 MessageSelector 实例?
【问题讨论】:
-
您假设 Lambda 的类型与匿名类相同,但可能不是您想的那样。当我遇到此类问题时,我经常使用的一种技术是使用我的 IDE 的重构工具将 lambda 提取到一个单独的变量中,并查看在变量声明中分配给它的类型。如果它与我的预期不同,我会修改类型,然后使用 IDE 的重构工具将 lambda 内联回原始表达式。我发现它会填充类型转换和其他我不知道要添加的泛型类型分类器。
-
@HankD 当然。我也喜欢你说的。但这里是特定
filter实现的更复杂的案例原因。
标签: java spring lambda spring-integration dsl