以块的形式提供数据的 Spring 端点

问题描述 投票:0回答:0

在我的团队中,我们有一个特定端点的问题,当使用某些特定参数调用时,它会提供一个巨大的 JSON 块。因此,例如,如果 JSON 有 1,000 行,在用我们的浏览器打开 URL(它是一个 GET 端点)大约 30 秒后,我们得到 100 行,然后再等几等,我们得到下一个 200 行,等等,直到 JSON筋疲力尽。这对我们来说是个问题,因为我们的应用程序在检索 JSON 之前超时。为了调试目的,我们想用我们自己的示例端点来模拟端点的行为。

到目前为止,以下是我所拥有的。为简单起见,我什至没有读取 JSON,只是一个随机生成的字符串。日志显示我正在一次读取几个字节的数据,然后写入并刷新 OutputStream。关键区别在于我的浏览器(或 POSTMAN)在最后 向我显示数据,而不是分块显示。有什么我可以做的,以便我可以看到数据以块的形式返回吗?


private static final int readBufSize = 10;
  
private static final int generatedStringSize = readBufSize * 10000;

@GetMapping(path = "/v2/payload/mocklargepayload")
  public void simulateLargePayload(HttpServletResponse response){
    try(InputStream inputStream = IOUtils.toInputStream(RandomStringUtils.randomAlphanumeric(generatedStringSize));
        OutputStream outputStream = response.getOutputStream()) {
      final byte[] buffer = new byte[readBufSize];
      for(int i = 0; i < generatedStringSize; i+= readBufSize){
        inputStream.read(buffer, 0, readBufSize - 1);
        buffer[buffer.length - 1] = '\n';
        log.info("Read bytes: {}", buffer);
        outputStream.write(buffer);
        log.info("Wrote bytes {}", buffer);
        Thread.sleep(500);
        log.info("Flushing stream");
        outputStream.flush();
      }
    } catch (IOException | InterruptedException e) {
      log.error("Received exception: {}", e.getClass().getSimpleName());
    }
  }
java spring inputstream java-io outputstream
© www.soinside.com 2019 - 2024. All rights reserved.