如何在Amazon SQS发送含多属性消息体?Lambda报格式错误
问题原因及解决方案
核心问题
你遇到的Jackson解析错误,根源是发送到SQS的消息体不是有效的JSON格式。错误提示里的"Unrecognized token 'body'",说明解析器读到的第一个内容是body,但这不符合JSON语法规则——JSON顶层结构必须是对象({})、数组([])、字符串、数字、布尔值或null,而单独的"body": {...}只是一个键值对,并非完整的JSON对象。
SQS消息体格式要求
SQS本身对消息体没有强制的JSON要求,它可以接受任意字符串。但如果你的Lambda函数需要将消息体解析为JSON,那么消息体必须是标准JSON格式:
- 顶层必须是完整的JSON对象(用
{}包裹所有键值对)或数组 - 所有字符串、键名必须用双引号包裹
- 无必要的转义字符(仅在字符串内部需要转义时使用)
修正后的正确消息体
如果业务逻辑需要保留body作为顶层键,完整消息体应为:
{ "body": { "id": "body127", "time": "null", "type": "credit-card-accounting.application-accounting", "payload": { "application_id": "3d6d2a1f78f54735b44f8b86e0db7570ccla", "date": "2023-02-14" }, "metadata": { "created_at": "2023-02-15T08:02:09.935433Z", "service_name": "credit-card-accounting", "request_id": "a6bd8261-e452-5652-ba2e-de0777ec6e6b" } } }
如果不需要顶层body键,直接发送内部对象即可:
{ "id": "body127", "time": "null", "type": "credit-card-accounting.application-accounting", "payload": { "application_id": "3d6d2a1f78f54735b44f8b86e0db7570ccla", "date": "2023-02-14" }, "metadata": { "created_at": "2023-02-15T08:02:09.935433Z", "service_name": "credit-card-accounting", "request_id": "a6bd8261-e452-5652-ba2e-de0777ec6e6b" } }
控制台发送注意事项
在SQS控制台发送消息时:
- 直接在"Message body"输入框粘贴标准JSON内容,不要额外添加引号或转义字符
- 可提前用本地JSON校验工具验证格式,避免语法错误
内容的提问来源于stack exchange,提问作者rahul.cs
相关产品推荐
相关产品推荐

