我正在使用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)
}
ServerResponse
是行不通的。请参见:https://dev59.com/e-k5XIcBkEYKwwoY8eTT#50026023 - ESalaServerRespons
,而是提到了ServerHttpResponse
。 - Roman T编辑
中遇到了一个问题。当我使用writeWith()
时,会出现标题可以设置的错误。例如Content-Length。我也无法设置其他标头。 - Roman T