假设,我能够通过Kafka或RabbitMQ发送消息,并通过@StreamListener使用它们。
活页夹配置为content-type ='application / json',所以我想可以在有效负载上添加条件。
我的要求是仅在字段的日期早于now()时获取元素。当此条件为真时,将消耗所有其他元素。
示例,我希望像这样:
@StreamListener(value = INPUT, condition = "data.startDate > now()")
public void onMessage(@Payload Data data) {
// ...
}
第一个问题是我收到错误消息:EL1008E:在类型为'byte []'的对象上找不到属性或字段'startDate'-可能不是公共的或无效的吗?
答案 0 :(得分:1)
这是正确的,因为有效负载不会转换为任何类型,并且以其原始格式byte[]
存在。请参阅this section专门的“条件中的内容类型协商” 子部分。
但是,对于您的情况,您可以简单地将表达式修改为new String(payload)....
之类,知道它在转换前总是byte[]
答案 1 :(得分:0)
我认为答案在文档中,并且与奥列格的答案相符
这是因为您正在测试的内容尚不存在 陈述你所期望的。那是因为消息的有效载荷不是 尚未从有线格式(byte [])转换为所需的类型。在 换句话说,它还没有经过类型转换过程 第10章,内容类型协商中进行了介绍。
因此,除非您使用SPeL表达式来评估原始数据(对于 例如,字节数组中第一个字节的值),使用消息 基于标头的表达式(例如condition = “ headers ['type'] =='dog'”)。