我正在使用StreamingResponseBody在一个spring @RestController中传输一个大型外部资源。
问:响应体的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);
}发布于 2022-02-03 14:48:21
它将被集装箱关闭。检查StreamingResponseBodyReturnValueHandler。
OutputStream封装了一个本机HttpServletResponse。
HttpServletResponse response = webRequest.getNativeResponse(HttpServletResponse.class);
Assert.state(response != null, "No HttpServletResponse");
ServerHttpResponse outputMessage = new ServletServerHttpResponse(response);如果您跟踪它,您将到达CoyoteAdapter,它正在调用finishResponse()并关闭OutputBuffer。
https://stackoverflow.com/questions/53723451
复制相似问题