spring引导:基于结果发送响应头

siotufzp  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(353)

我在一个spring引导应用程序中有以下控制器,它接受并返回一个二进制流。我需要接受一个蒸汽,加密它,同时返回结果。这些流可能非常大,无法保存在内存中:

@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 .

lh80um4z

lh80um4z1#

我认为http对于流加密服务器来说可能是一个错误的选择。该协议的核心是先请求后响应,并不是为可能在请求完成之前就开始返回响应的用例而设计的。对于早期返回的错误代码也有例外,但是对这种行为的支持看起来不稳定。
请求前的http响应

相关问题