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

Apache Camel反序列化后如何访问原始输入消息?

解决Apache Camel反序列化后获取原始JSON消息的方法

方法1:反序列化前将原始消息存入Exchange属性

在执行反序列化操作前,把原始JSON字符串保存到Exchange的自定义属性中,后续Process组件直接读取该属性即可:

from("activemq:queue:inputQueue")
    // 将原始消息存入自定义属性
    .setProperty("OriginalInputJson", body())
    // 执行JSON到Java对象的反序列化
    .unmarshal().json(JsonLibrary.Jackson, YourTargetClass.class)
    .process(exchange -> {
        // 从属性中获取原始JSON字符串
        String originalJson = exchange.getProperty("OriginalInputJson", String.class);
        // 获取反序列化后的Java对象
        YourTargetClass pojo = exchange.getIn().getBody(YourTargetClass.class);
        // 执行后续业务逻辑
    });

方法2:手动反序列化,不覆盖原始消息体

绕过Camel自动反序列化的消息体覆盖逻辑,手动完成反序列化并将结果存入属性,保留原始消息在body中:

from("activemq:queue:inputQueue")
    .process(exchange -> {
        String originalJson = exchange.getIn().getBody(String.class);
        // 手动完成JSON反序列化
        YourTargetClass pojo = new ObjectMapper().readValue(originalJson, YourTargetClass.class);
        // 将反序列化结果存入属性
        exchange.setProperty("DeserializedPojo", pojo);
    })
    .process(exchange -> {
        // 直接从body读取原始JSON
        String originalJson = exchange.getIn().getBody(String.class);
        // 从属性获取反序列化后的对象
        YourTargetClass pojo = exchange.getProperty("DeserializedPojo", YourTargetClass.class);
    });

注意事项

  • 使用Camel内置的unmarshal().json()时,默认会覆盖Exchange的In消息体,因此必须在反序列化步骤前主动保存原始内容。
  • 自定义属性名建议使用业务相关命名,避免与Camel内置属性(如Camel*前缀)冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:30:59