2017-08-30 38 views
1

使用REST和RESTEasy和Swagger,有什麼方法可以通過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:沒有匹配接受頭。

任何幫助將不勝感激!

+1

檢查客戶端請求的「accept」標頭,並嘗試將其設置爲「application/octet-stream」。 – Berger

回答

0

您可以在Response中返回inputstream對象的Object。

例如,

@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)); 
}