我正在尝试使用库azure-servicebus-jms-spring-boot-starter
将消息发送到主题。一切正常,但是消息作为application/xml
类型存储在订阅中,我找不到如何正确设置以将它们存储为application/json
的方法。我尝试配置消息转换器以发送ContentType
,如这里所述,但这也不起作用。
@Bean
public MessageConverter jacksonJmsMessageConverter() {
final MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(){
@Override
protected TextMessage mapToTextMessage(Object object, Session session, ObjectWriter objectWriter)
throws JMSException, IOException {
final TextMessage message = super.mapToTextMessage(object, session, objectWriter);
message.setStringProperty("ContentType", "application/json");
return message;
}
};
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("_type");
converter.setObjectMapper(objectMapper);
return converter;
}
没有公开的方法来设置从Qpid JMS客户端发送的消息的内容类型。客户端本身使用此字段作为JMS映射到AMQP的一部分,以区分它发送的某些消息类型,并在接收时确定某些消息应该呈现为什么。
从技术上讲,可以使用反射来获取值,但您必须从JmsMessageFacade类中使用的API不是公共的,并且可能会随着任何版本而更改,因此选择这样做会带来很大的风险。