JmsMessagingTemplate消息转换器损坏了吗?

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

我曾尝试将JmsMessagingTemplate与具有JmsTemplateorg.springframework.jms.support.converter.MappingJackson2MessageConverter一起使用,但问题是在JmsMessagingTemplate上导航至org.springframework.messaging.core.AbstractMessageSendingTemplate,其中使用的转换器是org.springframework.messaging.converter.MessageConverter的实现,似乎与org.springframework.jms.support.converter.MappingJackson2MessageConverter不兼容。

这是坏处还是我在这里尝试做错什么?

spring-boot spring-jms
2个回答
0
投票

您尚未添加配置代码。因此,假设您尚未为消息转换器添加bean。请在下面找到该配置的代码段,希望可以解决该问题。

@Bean
public MessageConverter jacksonJmsMessageConverter() {
    MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
    converter.setTargetType(MessageType.TEXT);
    converter.setTypeIdPropertyName("_type");
    converter.setObjectMapper(objectMapper());
    return converter;
}

@Bean
public ObjectMapper objectMapper() {
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.registerModule(new JavaTimeModule());
    objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
    return objectMapper;
}

@Bean
public JmsTemplate jmsTemplate(ConnectionFactory connectionFactory,
        DefaultJmsListenerContainerFactoryConfigurer configurer) {
    JmsTemplate jmsTemplate = new JmsTemplate();
    jmsTemplate.setConnectionFactory(connectionFactory());
    jmsTemplate.setMessageConverter(jacksonJmsMessageConverter());
    return jmsTemplate;
}

@Bean
public ConnectionFactory connectionFactory() {
    ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
    connectionFactory.setBrokerURL(url);
    connectionFactory.setUserName(user);
    connectionFactory.setPassword(password);
    return connectionFactory;
}

0
投票

因为我包装了jmsMessagingTemplate,所以必须像下面这样显式设置转换器:

© www.soinside.com 2019 - 2024. All rights reserved.