You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Cloud Stream路由表达式读取Avro payload报错如何解决

问题原因

routing-expression本身并不限制只能读取header,你遇到的报错是因为当前payload类型是org.apache.avro.generic.GenericData$Record,SpEL表达式的[]索引语法默认不支持该类型,无法像操作Map一样直接通过payload['type']读取字段值。从header读取时没有报错是因为header本身就是Map结构,天生支持[]索引操作。

解决方案

你可以直接修改路由表达式,调用Avro GenericRecord自带的get()方法读取字段即可,无需额外新增配置:

spring:
  cloud:
    function:
      routing-expression: "payload.get('type') == 'Event' ? 'handleEvent' : 'commitIgnoredEvent'"
      definition: functionRouter;handleDlqMessage

如果你的业务场景需要更复杂的payload字段操作,也可以提前配置消息转换器,在路由执行前将Avro GenericRecord转换为Map或者自定义POJO类型,之后就可以正常使用[]索引语法读取字段。


内容的提问来源于stack exchange,提问作者feenix110998

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 13:24:04