使用 REST 流式传输数据

Streaming data with REST

将 REST 与 RESTEasy 和 Swagger 结合使用,是否有任何方法可以通过 GET 端点将数据流式传输回调用方?我见过几个可以返回整个流的示例,但是我还没有看到任何可以实际流回数据的示例。我也确实看过这个例子(紧接着 link-Return File From Resteasy Server)但是,这个例子看起来像是返回一个流并期望调用者利用该流?这是一个正确的假设吗?:

@GET
@Produces(MediaType.APPLICATION_OCTET_STREAM)
@Path("/stream/test")
public Response getTestStream() {

    String myName = "name";
    InputStream stream = new ByteArrayInputStream(myName.getBytes(StandardCharsets.UTF_8));

    return Response.ok().entity(stream).build();
}

但这似乎对我不起作用。我得到一个例外:javax.ws.rs.NotAcceptableException: RESTEASY003635: 没有匹配接受 header.

如有任何帮助,我们将不胜感激!

您可以return Response 中输入流对象的对象。

例如

@GetMapping(value = "/stream/test")
@ResponseBody
public ResponseEntity<?> getTestStream() {

    String myName = "name";
    InputStream stream = new ByteArrayInputStream(myName.getBytes(StandardCharsets.UTF_8));

    HttpHeaders headers = new HttpHeaders();
    headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
    headers.add("Pragma", "no-cache");
    headers.add("Expires", "0");

    return ResponseEntity
            .ok()
            .headers(headers)
            .contentType(MediaType.APPLICATION_OCTET_STREAM)
            .body(new InputStreamResource(stream));
}