You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RabbitMQ发送JSON负载遇payload_not_string错误求助

解决RabbitMQ发送JSON负载时的payload_not_string错误

我来帮你搞定这个RabbitMQ的报错问题!你遇到的payload_not_string错误,核心原因其实很简单——RabbitMQ的HTTP API要求payload必须是字符串类型,哪怕你要发送JSON数据,也得先把JSON对象转换成字符串形式,而不是直接传一个JSON对象进去。

问题根源分析

你当前的请求体里,payload字段是一个原生JSON对象:

"payload": { "action": "created", "comment": { "url": "https://api.github.com/repos/baxterthehacker/public-repo/comments/11056394", "id": 11056394 } }

但RabbitMQ的HTTP接口不接受这种格式,它需要payload是字符串类型(哪怕这个字符串本身是JSON格式的)。你设置的content_type是对的,但这只是告诉消费者消息的格式,没法解决payload本身的类型问题。

修改后的请求体

把payload里的JSON对象转成字符串(注意内部双引号需要转义):

{ 
  "properties": { 
    "delivery_mode": 2, 
    "content_type": "application/json" 
  }, 
  "routing_key": "git", 
  "payload": "{\"action\": \"created\", \"comment\": {\"url\": \"https://api.github.com/repos/baxterthehacker/public-repo/comments/11056394\", \"id\": 11056394}}", 
  "payload_encoding": "string" 
}

完整可用的curl命令

在shell环境下,用单引号包裹整个请求体可以避免很多转义麻烦,完整命令如下:

curl -i -X POST \
-H "Content-Type:application/json" \
-H "Authorization:Basic Z3Vlc3Q6Z3Vlc3Q=" \
-d '{ 
  "properties": { 
    "delivery_mode": 2, 
    "content_type": "application/json" 
  }, 
  "routing_key": "git", 
  "payload": "{\"action\": \"created\", \"comment\": {\"url\": \"https://api.github.com/repos/baxterthehacker/public-repo/comments/11056394\", \"id\": 11056394}}", 
  "payload_encoding": "string" 
}'

额外补充说明

  • 你设置的content_type: "application/json"完全正确,这个字段是给消息的消费者看的,用来提示对方这是JSON格式的 payload,方便后续解析。
  • payload_encoding: "string"的设置也没问题,因为我们传递的是UTF-8编码的字符串类型 payload。

内容的提问来源于stack exchange,提问作者MMT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:09:52