【问题标题】:Spring Boot: send response header based on resultSpring Boot:根据结果发送响应头
【发布时间】:2020-12-23 21:49:14
【问题描述】:

我在 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);
    }

我需要根据控制器内的服务调用 (encryptionService.encrypt()) 的结果发送标头 (checksum)。 在HttpServletResponse 上设置标题不起作用。

我已经研究过实现Filter 类,但是它仅在您在.doFilter() 调用之前设置标题时才有效。我的问题是标题值是在之后计算的。

此外,实现 HandlerInterceptorAdapter 时也存在同样的问题。

【问题讨论】:

    标签: java spring-boot servlets http-headers


    【解决方案1】:

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

    HTTP Response before Request

    【讨论】:

      猜你喜欢
      • 2014-12-22
      • 1970-01-01
      • 2017-11-04
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 2020-11-09
      相关资源
      最近更新 更多