簡體   English   中英

為Spring Boot的傳入消息添加缺少的ContentType

[英]Add missing ContentType for incoming message for Spring Boot

我有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

為了使我在春季的學習曲線更加彎曲:)

知道所有消息將以Json格式到達時,我可以向所有傳入消息中添加缺少的標頭嗎?

還是存在另一種“更好”的方式?

這找到了工作

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

但我不知道如何

也許有人可以幫助我嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM