java如何从MessageCollector接收带有对象负载而不是字符串的GenericMessage
我尝试使用MessageCollector
测试通过spring-cloud-stream
发送和接收消息
当我对流云使用本机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
# 1 楼答案
但这是正确的。该通道用于
output
到消息传递代理。所以,我们刚刚将您的payload
序列化为JSON,现在就可以交付了。这就是为什么要在生产中使用一切OK,因为中间有一个消息代理,另一端有一个适当的input
反序列化程序。这种messageCollector
方法正是为了断言我们将要发送给代理的内容,因此添加一些额外的反序列化功能超出了这个实用程序的范围我唯一的建议是,在收到催收员的
inMsg
后,直接在payload
上使用JacksonObjectMapper
: