Web Services Java Spring WebFlux中从REST控制器返回(大)文件的正确React模式是什么?
情况:
- 我有一个非React式遗留库,它需要一个
OutputStream
并将其输出写入其中,方法签名类似于void produceData(OutputStream stream)
- 我想通过Web服务将方法的输出公开为PDF文件
- 文件有时可能非常大
- 我使用的是React式框架Spring WebFlux
动机:
- 我希望我的代码保持“尽可能的React”
- 我不想一次为所有数据分配一个字节数组,我想最大限度地利用传统方法将输出写入
OutputStream
这一事实
问题:
- 一般来说,WebFlux中返回大文件的正确React模式是什么?
- 当数据源是写入给定
OutputStream
的非React式方法时,WebFlux中返回大文件的正确React式模式是什么? - 我还应该能够让客户端了解Web服务的输出是一个具有适当名称的PDF文件。
我正在考虑:
Mono<ByteArrayResource> getData()
-我不想使用它,因为我必须为整个内容分配字节数组。- 在 * 非React式 * 环境中,我只会将
ServletResponse
对象注入到控制器方法中,并将其输出流ServletResponse.getOutputStream()
传递给我的遗留方法,但我不知道如何在 * React式 * 环境中执行此操作,也不知道是否建议这样做。 Mono<DataBuffer> getData()
-在控制器代码中,我可以很容易地从DefaultDataBufferFactory
获得一个新的DataBuffer
,并使用它的asOutputStream()
方法,但我不知道如何正确处理,因此DataBuffer
是在客户端使用数据后释放的。
处理此类情况的正确React模式是什么?
回答(1) 发布于 22天前
回答(3) 发布于 22天前
回答(3) 发布于 22天前
回答(1) 发布于 22天前
回答(1) 发布于 22天前
1条答案
按热度按时间myss37ts1#
调用一个无React的方法是完全可以的,唯一重要的是保持React流的React性,而不是阻塞它
例如,
如果你看到整个代码块在一个线程中执行,并且是连续的,在这个特定的流程中,你可以包括非React性方法,这是完全正常的。