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
相关产品推荐
相关产品推荐

