【发布时间】:2021-12-12 20:22:45
【问题描述】:
我有一段类似这样的代码:
@POST
@Produces(MediaType.APPLICATION_OCTET_STREAM)
@Path("test")
public Response getFileContent() {
InputStream in = Files.newInputStream(filePath);
return Response.ok(in,MediaType.APPLICATION_OCTET_STREAM);
}
Sonarcube 抱怨它没有包含在 try-with-resources 中。但是当我按照它的建议做时,当我尝试调用端点时,我会得到 java.nio.channels.ClosedChannelException。
如果我在响应中返回 InputStream,我真的需要手动关闭它吗?服务器不处理吗? 如果应该是,那么推荐的方法是什么?
【问题讨论】:
-
在这种情况下,您不能关闭流,因为任何处理
Response对象并将实际结果写入 HTTP 连接的东西都无法从中读取.所以在这种情况下,声纳报告了误报。