我对 Spring Integration 非常陌生,并试图弄清楚如何返回数据流,但找不到任何示例。我找到了有关 ByteStreamWritingMessageHandler 的文档,但对我来说似乎有点模糊,并且没有提供使用示例(除了 bean 定义)。我假设我需要做的是定义一个使用 ByteStreamWritingMessageHandler 的通道并在我的入站网关(通过回复通道)中引用它,但我有一些问题:
首先,我说的对吗?我可以使用默认频道类型吗?我需要通道适配器吗?我可以从我的服务方法中返回一个 ByteArrayOutputStream 吗?频道定义会是什么样子?
任何帮助将不胜感激。
- - - - - - - -更新 - - - - - -
我们当前的端点结构如下:
<int:channel id="httpReplyChannel"/>
<int:channel id="exampleService.exampleMethod"/>
<int-http:inbound-gateway path="/example"
supported-methods="POST"
request-channel="exampleService.exampleMethod"
request-payload-type="java.lang.Integer"
reply-channel="httpReplyChannel"
message-converters="jsonMessageConverter"
mapped-request-headers="*"/>
<int:service-activator input-channel="exampleService.exampleMethod"
ref="exampleService"
method="exampleMethod"/>
所以我们使用两个通道,一个用于入站,一个用于出站,并使用 http:inbound-gateway 的回复通道属性来配置出站通道。我想遵循相同的模式,但创建一个新的出站渠道。我的问题是我不确定哪种类型的频道最适合返回流。端点将直接向浏览器返回一个包含图像的流(浏览器将通过 HTML img 标签发出请求)。因此,我需要我的 exampleMethod 来返回一个流 (ByteArrayOutputStream),并且我需要能够根据返回的图像类型来动态设置标题。