【问题标题】:Add missing ContentType for incoming message for Spring Boot为 Spring Boot 的传入消息添加缺少的 ContentType
【发布时间】:2019-03-05 09:15:24
【问题描述】:

我有 Spring Boot 应用程序

它正在从 ActiveMQ 接收 Json 格式的消息

@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 格式到达,我可以在所有传入消息中添加缺少的标头吗?

还是存在另一种“更好”的方式?

【问题讨论】:

    标签: java json spring-boot content-type


    【解决方案1】:

    This 找到了工作

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

    但我不知道怎么做

    也许有人可以帮我解决这个问题?

    【讨论】:

    • 谢谢,你救了我的命 :)
    猜你喜欢
    • 2023-02-08
    • 1970-01-01
    • 2019-12-01
    • 2023-03-31
    • 2016-02-14
    • 1970-01-01
    • 2016-11-25
    • 2020-03-29
    • 2022-01-22
    相关资源
    最近更新 更多