首页 > 解决方案 > 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.

标签: javaspring-bootservletshttp-headers

解决方案


我认为 HTTP 对于流式加密服务器来说可能是一个糟糕的选择。该协议的核心是 REQUEST 然后 RESPONSE 并且不是为您可能在请求完成之前开始返回响应的用例而设计的。早期返回的错误代码有例外,但对这种行为的支持看起来参差不齐。

请求前的 HTTP 响应


推荐阅读