首页 > 解决方案 > Spring Kafka 监听器使用 JSON 并推断域对象

问题描述

我有一个主题将与多种类型的 JSON 消息一起发布。我无法控制发布者代码来添加任何标头等。但是,我想利用@KafkaHanlder来处理推断到域对象的不同 JSON 消息。我得到了一些参考https://github.com/spring-projects/spring-kafka/tree/master/samples/sample-02

由于我无法控制发布者代码,因此我想使用自定义反序列化器处理多种 JSON 类型。编写自定义反序列化程序以处理多个 JSON 对象的任何引用@KafkaHandler

标签: jsonspring-bootapache-kafkaspring-kafkajson-deserialization

解决方案


您不能在没有反序列化的情况下使用类级别的侦听器。这是第 22 条规则。

要确定调用哪个方法,我们需要知道类型(反序列化后);如果尚未反序列化,我们无法推断类型。

您可以为多个 JSON 反序列化器编写一个包装器,或者使用try...until success,或者通过“窥视”JSON 来确定要调用哪个反序列化器来获取此记录。

if (json.contains "\"foo\":") {
     return deserializeWithFooDeser(data, headers);
}

推荐阅读