是否应该在 StreamingResponseBody 中显式关闭 OutputStream?
Should OutputStream be closed explicit in StreamingResponseBody?
我在 spring @RestController
.
中使用 StreamingResponseBody
流式传输大量外部资源
问题:响应体的OutputStream
是否应该在这里显式关闭?
@GetMapping("/{filename}")
public ResponseEntity<StreamingResponseBody> getFile(@PathVariable String filename) {
StreamingResponseBody responseBody = outputStream -> {
resolveExternally(outputStream, response, filename);
//TODO should the stream be closed explicit here?
//outputStream.close();
};
return ResponseEntity.ok(responseBody);
}
它将被容器关闭。检查 StreamingResponseBodyReturnValueHandler.
OutputStream
包装原生 HttpServletResponse
.
HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class);
Assert.state(response != null, "No HttpServletResponse");
ServerHttpResponse outputMessage = new ServletServerHttpResponse(response);
如果你顺着它往下走,你会到达 CoyoteAdapter
,它正在调用 finishResponse()
并关闭 OutputBuffer。
我在 spring @RestController
.
StreamingResponseBody
流式传输大量外部资源
问题:响应体的OutputStream
是否应该在这里显式关闭?
@GetMapping("/{filename}")
public ResponseEntity<StreamingResponseBody> getFile(@PathVariable String filename) {
StreamingResponseBody responseBody = outputStream -> {
resolveExternally(outputStream, response, filename);
//TODO should the stream be closed explicit here?
//outputStream.close();
};
return ResponseEntity.ok(responseBody);
}
它将被容器关闭。检查 StreamingResponseBodyReturnValueHandler.
OutputStream
包装原生 HttpServletResponse
.
HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class);
Assert.state(response != null, "No HttpServletResponse");
ServerHttpResponse outputMessage = new ServletServerHttpResponse(response);
如果你顺着它往下走,你会到达 CoyoteAdapter
,它正在调用 finishResponse()
并关闭 OutputBuffer。