将ObjectMapper注入Spring Kafka serialiser/deserialiser

wja*_*ans 6 java spring spring-boot spring-kafka

我正在使用Spring Kafka 1.1.2-RELEASE和Spring Boot 1.5.0 RC,我已经配置了一个自定义值serialiser/deserialiser类extend org.springframework.kafka.support.serializer.JsonSerializer/ org.springframework.kafka.support.serializer.JsonDeserializer.这些类确实使用了Jackson ObjectMapper,它可以通过构造函数提供.

是否有可能从我的Spring上下文中注入ObjectMapper?我已经配置了一个ObjectMapper,我想在serialiser/deserialiser中重用它.

Art*_*lan 8

您可以配置JsonSerializerJsonDeserializer作为@Beans.ObjectMapper向他们注入所需的东西.并在bean DefaultKafkaProducerFactoryDefaultKafkaConsumerFactorybean定义中使用这些bean :

    @Bean
    public ProducerFactory<Integer, String> producerFactory() {
        DefaultKafkaProducerFactory<Integer, String> producerFactory = 
                new DefaultKafkaProducerFactory<>(producerConfigs());
        producerFactory.setValueSerializer(jsonSerializer());
        return producerFactory;
    }
Run Code Online (Sandbox Code Playgroud)


小智 5

@Component
public class ObjectMapperProducerFactoryCustomizer implements DefaultKafkaProducerFactoryCustomizer {

    private final ObjectMapper objectMapper;

    public ObjectMapperProducerFactoryCustomizer(ObjectMapper objectMapper) {
        this.objectMapper = objectMapper;
    }

    @Override
    public void customize(DefaultKafkaProducerFactory<?, ?> producerFactory) {
        if (Objects.nonNull(producerFactory)) {
            producerFactory.setValueSerializer(new JsonSerializer<>(objectMapper));
        }
    }

}
Run Code Online (Sandbox Code Playgroud)