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

如何在Anypoint MQ订阅者后读取Java对象Payload?

解决Anypoint MQ订阅端无法读取Java Payload的问题

问题根源

发布端直接输出Java对象时,Anypoint MQ会默认用Java序列化把对象转成二进制存储,订阅端直接读取payload.^raw只能拿到原始二进制流,没法直接解析成可读结构。

推荐解决方案:改用通用格式传输(优先选择)

直接在发布端把Java对象转成JSON这类通用格式,避开二进制序列化的兼容性问题:

修改发布端DataWeave代码

%dw 2.0
output application/json
---
{
    key1: "value1",
    key2: "value2"
}

订阅端处理代码

这时订阅端不用调用^raw,直接读取payload即可:

%dw 2.0
output application/java
---
payload

若必须传输Java序列化对象的处理方式

如果业务要求必须用Java对象序列化传输,需要在订阅端做反序列化操作:

使用DataWeave Java模块反序列化

%dw 2.0
import java!java::io::ByteArrayInputStream
import java!java::io::ObjectInputStream
output application/java
---
ObjectInputStream::new(ByteArrayInputStream::new(payload.^raw)).readObject()

注意:要保证发布端和订阅端的Java类版本一致,且类实现了Serializable接口,否则会反序列化失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:28:13