2017-08-30 2 views
1

En utilisant REST avec RESTEasy et Swagger, existe-t-il un moyen de retransmettre des données à l'appelant avec un point de terminaison GET? J'ai vu quelques exemples où l'ensemble du flux peut être renvoyé, mais je n'ai vu aucun exemple où les données peuvent effectivement être retransmises. J'ai également jeté un coup d'oeil à cet exemple (suivi de ce lien - Return File From Resteasy Server) cependant, cet exemple ressemble à renvoyer un flux et s'attendre à ce que l'appelant utilise le flux? Est-ce une supposition correcte ?:Diffusion de données avec 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(); 
} 

Mais cela ne semble pas fonctionner pour moi. J'obtiens une exception: javax.ws.rs.NotAcceptableException: RESTEASY003635: Aucune correspondance pour l'en-tête d'acceptation.

Toute aide serait grandement appréciée!

+1

Vérifiez l'en-tête 'accept' de votre requête client et essayez de l'affecter à' application/octet-stream'. – Berger

Répondre

0

Vous pouvez renvoyer l'objet de l'objet inputtream en réponse.

Par exemple.

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