简体   繁体   中英

Add missing ContentType for incoming message for Spring Boot

I have Spring boot app

It is receiving Json formatted messages from ActiveMQ

@Component class Receiver {
    @JmsListener(destination = "queue")
    public void receiveMessage(BusMessage message) {
        System.out.println("Received <" + message + ">");
    }

The problem, is what sometimes Json can arrive without proper header

In this case i get exception

org.springframework.messaging.converter.MessageConversionException: Cannot convert from [java.lang.String] to [cam.melexis.minipcs2socketioserver.BusMessage] for org.springframework.jms.listener.adapter.AbstractAdaptableMessageListener$MessagingMessageConverterAdapter$LazyResolutionMessage@38bd4ff9, failedMessage=org.springframework.jms.listener.adapter.AbstractAdaptableMessageListener$MessagingMessageConverterAdapter$LazyResolutionMessage@38bd4ff9

One solution can be is to get message as string and deserialise it

@Component class Receiver {
    @JmsListener(destination = "queue")
    public void receiveScannerMessage(Message message, Session session) {
        System.out.println("Received <" + message + ">");
    }

But i want to do something more graceful

To simplify all @JmsListener

And to make my learning curve in Spring more curved :)

Knowing, what all messages will arrive in Json format, can i add missing header to all incoming messages?

Or it is another "better" way exist?

This made a job

@EnableJms
@Configuration class JmsListenerConfig implements JmsListenerConfigurer {

 Logger logger = LoggerFactory.getLogger(Receiver.class);

 @Bean
 public DefaultMessageHandlerMethodFactory handlerMethodFactory() {
    DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory();
    factory.setMessageConverter(messageConverter());
    return factory;
 }

 @Bean
 public MessageConverter messageConverter() {
    return new MappingJackson2MessageConverter();
 }

 @Override
 public void configureJmsListeners(JmsListenerEndpointRegistrar registrar) {
    registrar.setMessageHandlerMethodFactory(handlerMethodFactory());
 }
}

But i have no idea how

Maybe anybody can help me with this?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM