Java Spring引导:基于结果发送响应头
我在Spring引导应用程序中有以下控制器,它接受并返回二进制流。我需要接受一个蒸汽,加密它,同时返回结果。这些流可能非常大,无法保存在内存中:Java Spring引导:基于结果发送响应头,java,spring-boot,servlets,http-headers,Java,Spring Boot,Servlets,Http Headers,我在Spring引导应用程序中有以下控制器,它接受并返回二进制流。我需要接受一个蒸汽,加密它,同时返回结果。这些流可能非常大,无法保存在内存中: @PostMapping(value = "/encrypt-stream/", consumes = MediaType.APPLICATION_OCTET_STREAM_VALUE, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) public void
@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);
}
我需要根据控制器内服务调用的结果(encryptionService.encrypt()
)发送a头(校验和()。
在HttpServletResponse
上设置标头不起作用
我已经研究了如何实现Filter
类,但是它只在.doFilter()
调用之前设置头时起作用。我的问题是页眉值是在之后计算的
另外,实现HandlerInterceptorAdapter
也存在同样的问题,我认为HTTP对于流式加密服务器来说可能是一个糟糕的选择。该协议的核心是“先请求后响应”,并不是为您可能在请求完成之前开始返回响应的用例而设计的。早期返回的错误代码也有例外,但对这种行为的支持似乎参差不齐