2017-08-30 1 views
1

RESTEasyとSwaggerでRESTを使用すると、GETエンドポイントで呼び出し元にデータをストリームする方法はありますか?ストリーム全体を返すことができるいくつかの例を見てきましたが、データを実際にストリームバックできる例は見ていません。私もこの例を見ましたが(このリンクの後に続きます - Return File From Resteasy Server)、この例ではストリームを返していて、呼び出し元がストリームを利用することを期待していますか?これは正しい仮定ですか:RESTでデータをストリーミングする

@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:Acceptヘッダーに一致しません。

ご協力いただければ幸いです!

+1

クライアントリクエストの 'accept'ヘッダーを確認し、' application/octet-stream'に設定しようとします。 – Berger

答えて

0

InputstreamオブジェクトのObjectを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)); 
} 
関連する問題