在 Spring Boot 中,可以使用 StreamingResponseBody 接口来实现以流的方式一点一点返回 JSON 数据。

示例代码如下:

@GetMapping("/stream")
public ResponseEntity<StreamingResponseBody> streamJson() {
    StreamingResponseBody responseBody = outputStream -> {
        JsonGenerator jsonGenerator = new JsonFactory().createGenerator(outputStream, JsonEncoding.UTF8);
        jsonGenerator.writeStartArray();

        // 模拟生成大量 JSON 数据
        for (int i = 0; i < 100000; i++) {
            jsonGenerator.writeStartObject();
            jsonGenerator.writeStringField('name', 'user' + i);
            jsonGenerator.writeNumberField('age', 20 + i);
            jsonGenerator.writeEndObject();
        }

        jsonGenerator.writeEndArray();
        jsonGenerator.flush();
        jsonGenerator.close();
    };

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    return new ResponseEntity<>(responseBody, headers, HttpStatus.OK);
}

在上面的示例中,我们定义了一个 GET 请求处理器方法,该方法返回一个 ResponseEntity<StreamingResponseBody> 对象。其中,StreamingResponseBody 接口的实现类负责将 JSON 数据写入输出流中。

在实现类中,我们使用 Jackson 的 JsonGenerator 类来生成 JSON 数据。在这个示例中,我们模拟生成了一万条 JSON 数据。

最后,我们创建一个包含正确的 Content-Type 头信息的 ResponseEntity 对象,并将 StreamingResponseBody 对象作为主体返回给客户端。

当客户端发起请求时,服务器将以流的方式将 JSON 数据返回给客户端。客户端可以在接收到每个 JSON 对象时进行处理,而不必等待整个 JSON 数组生成完成。

使用流式返回 JSON 数据的优势:

  • 提高应用程序性能:避免一次性生成所有数据,减少内存占用。
  • 改善用户体验:可以立即开始处理数据,而不是等待所有数据加载完成。
  • 适用于处理大型数据集:可以处理超出内存限制的大数据。
SpringBoot 流式返回 JSON 数据:高效处理大数据

原文地址: https://www.cveoy.top/t/topic/lfre 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录