如何正确将 JSONObject 发送至 AWS SQS 队列
发布时间 - 2026-01-29 00:00:00 点击率:次aws sqs 要求消息体必须是合法的 json 字符串,而 `jsonobject` 是 java 对象,并非字符串;直接传递 `jsonobject` 会导致序列化异常或空内容(如 `{empty:true}`),需显式调用 `.tostring()` 转为标准 json 字符串后再发送。
在使用 Spring Cloud AWS 的 QueueMessagingTemplate.convertAndSend() 方法向 Amazon SQS 发送消息时,底层会依赖 Jackson 或默认的 MessageConverter 对传入对象进行序列化。该方法对不同类型的输入行为如下:
- ✅ String 类型:直接作为消息体发送,无需额外序列化;
- ✅ 自定义 Java Bean(如 TaskMessage):由 Jackson 自动序列化为标准 JSON 字符串(前提是字段可访问、无循环引用等);
- ❌ org.json.JSONObject 类型:它不是标准 POJO,也不实现 Serializable 的语义化序列化契约;Spring 默认的 MappingJackson2MessageConverter 无法正确识别其结构,可能触发其内部 empty 标志逻辑(尤其在老版本 org.json:json 中),最终导致消息体被错误地序列化为 { "empty": true }。
正确做法:始终发送 JSON 字符串
应确保传入 convertAndSend() 的参数是 String 类型,且内容为格式良好的 JSON:
public String toJson() throws JSONException {
JSONObject json = new JSONObject();
json.put("payload", this.payload);
json.put("id", this.taskId);
return json.toString(); // ← 关键:转为字符串!
}然后调用:
queueMessagingTemplate.convertAndSend(queueUrl, task.toJson());
补充说明与最佳实践
⚠️ 不要依赖 JSONObject 对象本身作为消息载荷 —— 它是工具类,不是数据载体;
-
✅ 推荐统一使用 Jackson(ObjectMapper)处理序列化,更可控、兼容性更好:
private static final ObjectMapper mapper = new ObjectMapper(); public String toJson() throws JsonProcessingException { return mapper.writeValueAsString(Map.of( "payload", this.payload, "id", this.taskId )); } ? 若必须使用 org.json,请确认依赖版本(建议 ≥ 20250227),并避免嵌套 JSONObject/JSONArray 中含非标准类型(如 LocalDateTime),否则 toString() 可能抛异常;
? 测试建议:发送前打印 json.toString() 结果,验证是否输出预期 JSON(如 {"payload":"data","id":"123"}),而非 {} 或 {empty:true}。
总之,SQS 消息体本质是纯文本协议,一切需归结为合法 JSON 字符串——这是集成中最易忽视却最关键的一环。
# java
# js
# json
# app
# 工具
# amazon
# spring
# spring cloud
# String
# 字符串
# 循环
# 对象
# 序列化
# 这是
# 也不
# 它是
# 自定义
# 而非
# 最关键
# 请确认
# 不同类型
# 再发
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
网站制作壁纸教程视频,电脑壁纸网站?
Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程
如何挑选最适合建站的高性能VPS主机?
Thinkphp 中 distinct 的用法解析
高端网站建设与定制开发一站式解决方案 中企动力
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
如何在Windows服务器上快速搭建网站?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
北京网站制作公司哪家好一点,北京租房网站有哪些?
Android 常见的图片加载框架详细介绍
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
java ZXing生成二维码及条码实例分享
桂林网站制作公司有哪些,桂林马拉松怎么报名?
Laravel怎么连接多个数据库_Laravel多数据库连接配置
如何获取上海专业网站定制建站电话?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
高端云建站费用究竟需要多少预算?
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
如何在阿里云高效完成企业建站全流程?
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
微信小程序 scroll-view组件实现列表页实例代码
Android中AutoCompleteTextView自动提示
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
在线教育网站制作平台,山西立德教育官网?
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
如何快速生成橙子建站落地页链接?
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
长沙做网站要多少钱,长沙国安网络怎么样?
深圳网站制作培训,深圳哪些招聘网站比较好?
使用C语言编写圣诞表白程序
音乐网站服务器如何优化API响应速度?
如何做网站制作流程,*游戏网站怎么搭建?
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
Laravel如何处理文件下载请求?(Response示例)
浅析上传头像示例及其注意事项
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
phpredis提高消息队列的实时性方法(推荐)
如何在七牛云存储上搭建网站并设置自定义域名?
Swift中swift中的switch 语句


