我曾尝试将JmsMessagingTemplate
与具有JmsTemplate
的org.springframework.jms.support.converter.MappingJackson2MessageConverter
一起使用,但问题是在JmsMessagingTemplate
上导航至org.springframework.messaging.core.AbstractMessageSendingTemplate
,其中使用的转换器是org.springframework.messaging.converter.MessageConverter
的实现,似乎与org.springframework.jms.support.converter.MappingJackson2MessageConverter
不兼容。
这是坏处还是我在这里尝试做错什么?
您尚未添加配置代码。因此,假设您尚未为消息转换器添加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;
}
因为我包装了jmsMessagingTemplate,所以必须像下面这样显式设置转换器: