【发布时间】:2021-11-05 16:06:47
【问题描述】:
我正在使用 Spring Kafka 来使用来自某个主题的消息。下面是消费者将要收听的对象的结构。
{
"identifier": "ABCD1234",
"data": {
"id": 12345,
"source": 'Dashboard',
"status": 'SUCCESS',
}
}
要使用这些对象,我需要使用 JsonDeserilizer。但令人担忧的是这个 JSON 的数据部分不会被修复。它可能有不同的结构。生产者将以属性不同于上述格式的任何其他格式发送数据。
如果我必须创建 JsonDeserlizer,那么我需要将各个属性映射到 Java 模型类。我认为将data 解析为字符串会简化事情
这是我现在使用的代码。但它会将所有内容解析为字符串。
@Bean
public ConsumerFactory<String, String> consumerFactory() {
Map<String, Object> config = new HashMap<>();
config.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaConfig.getConsumerBootstrapServers());
config.put(ConsumerConfig.GROUP_ID_CONFIG, GROUP_ID_CONFIG);
config.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
config.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
config.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, AUTO_OFFSET_RESET_CONFIG);
return new DefaultKafkaConsumerFactory<>(config, new StringDeserializer(),
new StringDeserializer());
}
@Bean
public ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerFactory(ConsumerFactory<String, String> consumerFactory) {
ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory);
return factory;
}
如何将数据字段解析为字符串?简而言之,使用 JsonDeserilizer 解析整个对象,但将 data 字段解析为字符串。
TIA
【问题讨论】:
标签: java spring-boot apache-kafka spring-kafka