为Spring Boot添加缺少的ContentType以接收传入消息

问题描述 投票:0回答:1

我有Spring启动应用程序

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

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

java json spring-boot content-type
1个回答
0
投票

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

但我不知道怎么做

也许有人可以帮我这个吗?

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.