我的REST控制器中有这样一种方法,返回文件数据:
@RequestMapping(
value = "by-id/{attachmentId}",
method = RequestMethod.GET
)
public ResponseEntity<InputStreamResource> attachmentById(
@PathVariable("attachmentId") String attachmentId) {
GridFSDBFile file = service.getAttachment(attachmentId);
...... some unrelated code here, setting headers, etc .....
return new ResponseEntity<InputStreamResource>(
new InputStreamResource(file.getInputStream()), respHeaders, HttpStatus.OK);
}
这很好用,但是根据Fortify的报告,我将释放InputStream,显然在
file.getInputStream()
中打开了它。可能由于InputStream是自动关闭的,我不得不使用try-with-resources,或者在file.getInputStream().close()
块中调用finally
。但是似乎不能这样做,因为我完全不知道InputStreamResource
的构造函数或其方法的实现,即该输入流是否仍在返回的ResponseEntity中使用。我是什么做的?
最佳答案
我认为您已经能够找到问题的答案。而且,可能要对Fortify提出问题,因为Stream已被Spring关闭-请参阅“调查”-How to handle IO streams in Spring MVC