gpt4 book ai didi

java - 如何使用对象有效负载而不是来自 MessageCollector 的字符串接收 GenericMessage

转载 作者:搜寻专家 更新时间:2023-11-01 02:58:08 25 4
gpt4 key购买 nike

我尝试使用 MessageCollector 通过 spring-cloud-stream 测试消息发送和接收。

当我对流云使用 native java 序列化时一切正常,但是当我将序列化更改为 json 时,MessageCollector 返回带有 string 有效负载而不是 SomeObject 有效负载的 GenericMessage .

配置是

  cloud.stream.default.contentType=application/json 

测试用例:

    Message outMsg = new GenericMessage<SomeObject>(new SomeObject(1));
someChannel.send(outMsg);
GenericMessage<SomeObject> inMsg = (GenericMessage<SomeObject>) messageCollector.forChannel(someChannel).poll();

Assert.assertTrue(inMsg.getPayload() instanceof SomeObject);

因此断言是错误的。 inMsg 包含字符串有效负载(该字符串包含 SomeObject 的有效 json 表示)。

我的问题是:我如何从 MessageCollector 接收带有 SomeObject 负载的 GenericMessage

生产环境无需显式映射到 SomeObject 即可正常工作。

最佳答案

但这是正确的。该 channel 用于将输出 到消息传递代理。因此,我们刚刚将您的 payload 序列化为 JSON 并准备好交付。这就是为什么您在生产中使用一切正常的原因,因为您在中间有一个消息传递代理,而在另一侧有用于 input 的适当反序列化器。此 messageCollector 方法正是用于断言我们将发送给代理的内容,因此添加一些额外的反序列化功能超出了该实用程序的范围。

我只能建议您在从收集器接收到 inMsg 后,直接在 payload 上使用 Jackson ObjectMapper:

Message outMsg = new GenericMessage<SomeObject>(new SomeObject(1));
someChannel.send(outMsg);
GenericMessage<String> inMsg = (GenericMessage<String>) messageCollector.forChannel(someChannel).poll();
SomeObject someObject = new ObjectMapper().readValue(inMsg.getPayload(), SomeObject.class);

Assert.assertTrue(someObject instanceof SomeObject);

关于java - 如何使用对象有效负载而不是来自 MessageCollector 的字符串接收 GenericMessage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46453840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com