Type-Mappings für den `StringJsonMessageConverter` konfiguriert spring/spring-producer--messageconverter--COMMITS--2025-02
authorKai Moritz <kai@juplo.de>
Fri, 14 Feb 2025 14:16:01 +0000 (15:16 +0100)
committerKai Moritz <kai@juplo.de>
Fri, 14 Feb 2025 14:38:12 +0000 (15:38 +0100)
src/main/java/de/juplo/kafka/ApplicationConfiguration.java

index 4a937cd..f376865 100644 (file)
@@ -10,8 +10,12 @@ import org.springframework.kafka.core.KafkaTemplate;
 import org.springframework.kafka.core.ProducerFactory;
 import org.springframework.kafka.support.converter.ByteArrayJsonMessageConverter;
 import org.springframework.kafka.support.converter.JsonMessageConverter;
+import org.springframework.kafka.support.mapping.DefaultJackson2JavaTypeMapper;
+import org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper;
 
 import java.time.Duration;
+import java.util.HashMap;
+import java.util.Map;
 
 
 @Configuration
@@ -50,6 +54,18 @@ public class ApplicationConfiguration
   @Bean
   public ByteArrayJsonMessageConverter jsonMessageConverter(ObjectMapper objectMapper)
   {
-    return new ByteArrayJsonMessageConverter(objectMapper);
+    ByteArrayJsonMessageConverter converter = new ByteArrayJsonMessageConverter();
+    DefaultJackson2JavaTypeMapper typeMapper = new DefaultJackson2JavaTypeMapper();
+
+    // Verwende eine einfache, kurze Type-ID anstatt FQN
+    typeMapper.setTypePrecedence(Jackson2JavaTypeMapper.TypePrecedence.TYPE_ID);
+    Map<String, Class<?>> typeMappings = new HashMap<>();
+    typeMappings.put("ADD", AddNumberMessage.class);
+    typeMappings.put("CALC", CalculateSumMessage.class);
+    typeMapper.setIdClassMapping(typeMappings);
+
+    converter.setTypeMapper(typeMapper);
+
+    return converter;
   }
 }