使用 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));
}
将 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));
}