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
相关产品推荐
相关产品推荐

