Добавить отсутствующий ContentType для входящего сообщения для Spring Boot - PullRequest
0 голосов
/ 05 марта 2019

У меня есть загрузочное приложение Spring

Оно получает сообщения в формате Json от ActiveMQ

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

Проблема в том, что иногда Json может приходить без правильного заголовка

Вв этом случае я получаю исключение

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

Одним из решений может быть получение сообщения в виде строки и десериализация его

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

Но я хочу сделать что-то более изящное

Чтобы упростить все @ JmsListener

И сделать мою кривую обучения в Spring более изогнутой:)

Зная, что все сообщения будут поступать в формате Json, могу ли я добавить отсутствующий заголовок ко всем входящим сообщениям?

Или это другой "лучший" способ существования?

1 Ответ

0 голосов
/ 06 марта 2019

Этот сделал работу

@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());
 }
}

Но я понятия не имею, как

Может быть, кто-нибудь может мне помочь с этим?

...