java - Spring Boot:根据结果发送响应头
问题描述
我在 Spring Boot 应用程序中有以下控制器,它接受并返回二进制流。我需要接受蒸汽,对其进行加密并同时返回结果。此流可能非常大,无法保存在内存中:
@PostMapping(value = "/encrypt-stream/", consumes = MediaType.APPLICATION_OCTET_STREAM_VALUE, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public void encryptStream(HttpServletRequest request, HttpServletResponse response){
OutputStream os = response.getOutputStream();
InputStream is = request.getInputStream();
String checksum = encryptionService.encrypt(is, os);
response.setHeader("checksum", checksum);
}
我需要根据控制器内checksum
的服务调用 () 的结果发送标头 ( )。encryptionService.encrypt()
设置标题HttpServletResponse
不起作用。
我已经查看了实现Filter
类,但是它仅在您在.doFilter()
调用之前设置标题时才有效。我的问题是标头值是在之后计算的。
此外,实施HandlerInterceptorAdapter
.
解决方案
我认为 HTTP 对于流式加密服务器来说可能是一个糟糕的选择。该协议的核心是 REQUEST 然后 RESPONSE 并且不是为您可能在请求完成之前开始返回响应的用例而设计的。早期返回的错误代码有例外,但对这种行为的支持看起来参差不齐。
推荐阅读
- amazon-sns - 使用 AWS 的自定义电子邮件地址
- python - 如何使用 Python Selenium 在网站上查找特定文本?
- webstorm - 我可以隐藏 WebStorm 生成的 .idea 文件夹吗?
- javascript - 在 Bootstrap 选项卡中显示来自 2 个表的数据
- python - Python:使`input`读写自定义文件描述符
- python - 直接搜索文件和搜索使用“read()”函数获得的字符串有什么区别
- python - 导入包时文件名只能是一个单词吗?
- apache - htaccess - remove index.php and keep a variable without key
- java - 更改对象的特定注释字段的值,该对象用作某个对象中多个字段的类型 - Jackson Object Mapper Serialize
- r - R ggplot,向箱线图添加新数据