0

I have some confusion around deserialisation of a message from RabbitMQ - using Spring Boot.

So I've read that I need to configure RabbitListenerConfigurer so in my application I have implemented it like so:

class Application : RabbitListenerConfigurer {
 ...

 override fun configureRabbitListeners(registrar: RabbitListenerEndpointRegistrar) {
        registrar.messageHandlerMethodFactory = messageHandlerMethodFactory()
    }

    @Bean
    fun messageHandlerMethodFactory(): MessageHandlerMethodFactory {
        val messageHandlerMethodFactory = DefaultMessageHandlerMethodFactory()
        messageHandlerMethodFactory.setMessageConverter(consumerJackson2MessageConverter())
        return messageHandlerMethodFactory
    }

    @Bean
    fun consumerJackson2MessageConverter(): MappingJackson2MessageConverter {
        return MappingJackson2MessageConverter()
    }

}

Then the code doing the listening looks like:

@JsonIgnoreProperties(ignoreUnknown = true)
data class MyModel (
        val id : String,
        val s3FilePath : String
)

@Service
class Listener {
    @RabbitListener(queues = ["\${new.queue}"])
    fun action(data: MyModel) {
        println("Received message: {$data} from app1 queue.")
    }
}

However in the RabbitMQ Management tool, whenever I publish the message

{
    "incoming": "data",
    "id": "32132",
    "s3FilePath": "somefile.mp3"
}

enter image description here

I keep getting the error:

Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.work.MyModel` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
 at [Source: (byte[])"{
    "incoming": "data",
    "id": "32132",
    "s3FilePath": "somefile.mp3"

Any ideas whats going wrong?

Thanks

userMod2
  • 5,924
  • 9
  • 38
  • 81

0 Answers0