spring-stream发送一条带有" text / plain"的消息。 content-type而不是" application / json"

时间:2017-11-28 14:44:46

标签: spring-cloud-stream spring-rabbitmq

我想在内容类型为application / json的队列中生成响应,因为payload包含json对象。

但是...

不知道为什么我的spring-stream(基于RabbitMQ)总是生成带有以下标题的消息(有效负载是正确的并且具有JSON形式)。

(view from rabbit ui)
properties:
    delivery_mode:  2
    headers:    
      contentType:  text/plain
      originalContentType:  application/json;charset=UTF-8
    content_type:   text/plain

所以content_type等于 text / plain 而不是 application / json; charset = UTF-8

我尝试在以下配置中设置内容类型

spring:
  cloud:
    stream:
      default:
        content-type: application/json
      bindings:
        my-channel:
          content-type: application/json
          destination: my-channel-rs
          producer:
            exchange-type: direct
            max-length: 1000

但没有帮助。

我觉得在正确的响应中,单头内容类型应该存在值" application / json"。

但也许我错了?有人能够解释上述行为吗?

2 个答案:

答案 0 :(得分:2)

您似乎正在使用1.3版本的S-C-Stream。能否请你确认?我们当然可以看看。 另外,FWIW,整个'originalContentType'问题不是问题,只要你有一个SCSt应用程序的消费者(因为它将被重置为你期望的),但我假设它不是,对吗? / p>

此外,您有机会升级到2.0.0.M3。围绕contentType分辨率进行了很多改进。

答案 1 :(得分:0)

我有类似的问题。我需要底层的spring-amqp来使用" content-type"标头设置实际内容类型。 Spring-amqp通过检查消息有效负载的类来确定它,而不管"内容类型"报头中。

我创建了一个可能会或可能不会被接受的拉取请求:https://github.com/spring-projects/spring-amqp/pull/763/commits/25e4f9adf523a802ac5f26dd373eff8bb764fb49