My application is a Kafka consumer which receives a big fat custom message from the producer. We use Jackson to serialize and deserialize the messages.
A dummy of my consumer is here.
    public class LittleCuteConsumer {
        @KafkaListener(topics = "${kafka.bigfat.topic}", containerFactory = “littleCuteConsumerFactory")
       public void receive(BigFatMessage message) {
        // do cute stuff
        }
}
And the message that's been transferred
    @JsonIgnoreProperties(ignoreUnknown = true)
        public class BigFatMessage {
           private String fieldOne;
           private String fieldTwo;
           ...
           private String fieldTen;
           private CustomeFieldOne cf1;
           ...
           private CustomeFieldTen cf10; 
           // setters and getters
        }
Here is the object I want to deserialize the original message to.
    @JsonIgnoreProperties(ignoreUnknown = true)
    public class ThinMessage {
       private String fieldOne;
       private String fieldTwo;
      // setters and getters
    }
Original deserializer
public class BigFatDeserializer implements Deserializer<BigFatMessage> {
    @Override
    public void configure(Map<String, ?> configs, boolean isKey) {
        // Default implementation of configure method
    }
    @Override
    public BigFatMessage deserialize(String topic, byte[] data) {
        ObjectMapper mapper = new ObjectMapper();
        BigFatMessage biggie = null;
        try {
            biggie = mapper.readValue(data, BigFatMessage.class);
        } catch (Exception e) {
             // blame others
         }
        return biggie;
    }
    @Override
    public void close() {
        // Default implementation of close method
    }
}
As we can see here, the message contains a lot of fields and dependent objects which are actually useless for my consumer, and I don't want to define all the dependent classes in my consumer as well.
Hence, I need a way I to receive the message using a simple different model class and deserialize it to ignore the unnecessary fields from the original message!
How I'm trying to deserialize
public class ThinDeserializer implements Deserializer<ThinMessage> {
    @Override
    public void configure(Map<String, ?> configs, boolean isKey) {
        // Default implementation of configure method
    }
    @Override
    public ThinMessage deserialize(String topic, byte[] data) {
            ObjectMapper mapper = new ObjectMapper();
            ThinMessage cutie = null;
            try {
                cutie = mapper.readValue(data, ThinMessage.class);
            } catch (Exception e) {
                 // blame others
             }
            return cutie;
        }
        @Override
        public void close() {
            // Default implementation of close method
        }
    }
And get the below Jackson error:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of com.myapp.ThinMessage (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)\n
Accompanied by below Kafka exception.
org.springframework.kafka.listener.ListenerExecutionFailedException: Listener method could not be invoked with the incoming message\n
org.springframework.messaging.handler.annotation.support.MethodArgumentNotValidException: Could not resolve method parameter at index 0 
 
    