提问者:小点点

如何从Spring JMS为Azure ServiceBus设置ContentType


我正在尝试使用库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;
  }


共1个答案

匿名用户

没有公开的方法来设置从Qpid JMS客户端发送的消息的内容类型。客户端本身使用此字段作为JMS映射到AMQP的一部分,以区分它发送的某些消息类型,并在接收时确定某些消息应该呈现为什么。

从技术上讲,可以使用反射来获取值,但您必须从JmsMessageFacade类中使用的API不是公共的,并且可能会随着任何版本而更改,因此选择这样做会带来很大的风险。