【发布时间】:2018-06-05 20:47:03
【问题描述】:
我正在使用 Spring WebFlux 制作一个项目。
过去我曾使用StreamingResponseBody 将响应流式传输回客户端,但我在 WebFlux 中找不到等效项。
例子:
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
@GetMapping("/video")
public StreamingResponseBody stream() {
InputStream videoStream = ...
StreamingResponseBody res = (os) -> { IOUtils.copy(videoStream, os); }
return res;
}
WebFlux 是否有相当于StreamingResponseBody 的东西?或者,我应该导入传统的 Spring MVC 并混合它们吗?
编辑:到目前为止,我正在通过访问ServerHttpResponse(下面的示例)来解决它。但我仍然想知道更好的解决方案。
@GetMapping("/video")
fun stream2(response: ServerHttpResponse): Mono<Void> {
val factory = response.bufferFactory()
val publisher = videoStream
.observeVideoParts()
.map { factory.wrap(it.bytes) }
return response.writeWith(publisher)
}
【问题讨论】:
-
@Frischling 谢谢,但它不是重复的,使用基于注释的控制器和请求映射时,使用
ServerResponse不起作用。见:stackoverflow.com/a/50026023
标签: java spring spring-mvc kotlin spring-webflux