From cdd86a4ba112cd261b614fb17bbb20fba8efe5d6 Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Fri, 25 Oct 2024 08:45:05 +0200 Subject: [PATCH] GH-855 - Enable Kafka JSON rendering with default ObjectMapper. In case no ObjectMapper bean instance is present, we now fall back to creating a default one to render a JSON byte array. This is useful in case Jackson is on the class path but not necessarily the JacksonObjectMapperBuilder, which is located in spring-web. --- .../events/kafka/KafkaJacksonConfiguration.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/spring-modulith-events/spring-modulith-events-kafka/src/main/java/org/springframework/modulith/events/kafka/KafkaJacksonConfiguration.java b/spring-modulith-events/spring-modulith-events-kafka/src/main/java/org/springframework/modulith/events/kafka/KafkaJacksonConfiguration.java index 144ed793..fb6647e2 100644 --- a/spring-modulith-events/spring-modulith-events-kafka/src/main/java/org/springframework/modulith/events/kafka/KafkaJacksonConfiguration.java +++ b/spring-modulith-events/spring-modulith-events-kafka/src/main/java/org/springframework/modulith/events/kafka/KafkaJacksonConfiguration.java @@ -15,15 +15,17 @@ */ package org.springframework.modulith.events.kafka; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfiguration; -import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.PropertySource; import org.springframework.kafka.support.converter.ByteArrayJsonMessageConverter; -import org.springframework.kafka.support.converter.JsonMessageConverter; +import org.springframework.kafka.support.converter.RecordMessageConverter; import com.fasterxml.jackson.databind.ObjectMapper; @@ -34,15 +36,15 @@ import com.fasterxml.jackson.databind.ObjectMapper; * @since 1.1 */ @AutoConfiguration +@AutoConfigureBefore(KafkaAutoConfiguration.class) @ConditionalOnClass(ObjectMapper.class) @ConditionalOnProperty(name = "spring.modulith.events.kafka.enable-json", havingValue = "true", matchIfMissing = true) @PropertySource("classpath:kafka-json.properties") class KafkaJacksonConfiguration { @Bean - @ConditionalOnBean(ObjectMapper.class) - @ConditionalOnMissingBean(JsonMessageConverter.class) - ByteArrayJsonMessageConverter jsonMessageConverter(ObjectMapper mapper) { - return new ByteArrayJsonMessageConverter(mapper); + @ConditionalOnMissingBean(RecordMessageConverter.class) + ByteArrayJsonMessageConverter jsonMessageConverter(ObjectProvider mapper) { + return new ByteArrayJsonMessageConverter(mapper.getIfUnique(() -> new ObjectMapper())); } }