最佳答案
我有一个 Spring MVC 方法,它返回一个 ResponseEntity
。根据检索到的特定数据,有时候需要向用户返回一个数据流。其他时候,它将返回流以外的内容,有时候还会返回重定向。我非常希望它是一个流,而不是一个字节数组,因为它可以很大。
目前,我使用以下代码片段返回流:
HttpHeaders httpHeaders = createHttpHeaders();
IOUtils.copy(inputStream, httpServletResponse.getOutputStream());
return new ResponseEntity(httpHeaders, HttpStatus.OK);
遗憾的是,这不允许 SpringHttpHeaders
数据实际填充响应中的 HTTPHeader。这是有意义的,因为我的代码在 Spring 接收到 ResponseEntity
之前写入 OutputStream
。
以某种方式返回一个带有 InputStream
的 ResponseEntity
,并让 Spring 处理它,这将是非常好的。它还将平行于函数的其他路径,在这些路径中我可以成功地返回 ResponseEntity
。有没有什么办法可以让我用 Spring 来完成呢?
另外,我尝试返回 ResponseEntity
中的 InputStream
,只是为了看看 Spring 是否会接受它。
return new ResponseEntity(inputStream, httpHeaders, HttpStatus.OK);
但它抛出了一个例外:
org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation
我可以通过直接设置 HttpServletResponse
上的所有内容来使我的函数工作,但是我想只用 Spring 来做这件事。