首页 > 解决方案 > 如何在@StreamListener 中添加日期条件

问题描述

假设,我能够通过 Kafka 或 RabbitMQ 发送消息并使用 @StreamListener 使用它们。

绑定器配置为 content-type = 'application/json',所以我想可以在有效负载上添加条件。

我的要求是仅在字段的日期在 now() 之前获取元素。当此条件为真时,将消耗所有其他元素。

例如,我希望类似:

@StreamListener(value = INPUT, condition = "data.startDate > now()")
public void onMessage(@Payload Data data) { 
    // ...
}

第一个问题是我收到错误:EL1008E:在“byte []”类型的对象上找不到属性或字段“startDate”-可能不是公共的或无效的?

标签: spring-bootspring-cloudspring-cloud-stream

解决方案


这是正确的,因为有效负载没有转换为任何类型,而是以其原始形式存在,即byte[]. 请参阅本节具体“条件上下文中的内容类型协商”小节。

但是,对于您的情况,您可以简单地将表达式修改为类似new String(payload)....,知道它总是byte[]在它被转换之前


推荐阅读