2017-10-11 6 views
1

Je génère automatiquement les interfaces JAX-RS à partir de Swagger. J'utilise Jersey 2.25.1.Téléchargement du fichier JAX-RS/Jersey 2 - Existe-t-il une API commune pour le serveur et le proxy client généré?

Tout fonctionne correctement pour la plupart des cas d'utilisation. Nous avons la même interface pour le serveur et les parties client. Les clients sont générés à partir de l'interface avec org.glassfish.jersey.client.proxy.WebResourceFactory.

Maintenant, j'ai besoin de mettre en œuvre le téléchargement de fichiers via le streaming (les fichiers seront énormes, généralement dans la gamme de giga-octets, de sorte que la diffusion est nécessaire).

je peux utiliser la signature suivante pour le serveur:

@GET 
@Path("/DownloadFile") 
@Produces({"application/octet-stream"}) 
StreamingOutput downloadFileUniqueId(); 

Mais StreamingOutput ne peut évidemment être utilisé dans le client.

Y at-il une fonctionnalité dans JAX-RS/Jersey pour avoir une interface commune entre le serveur et le client?

Je l'ai vu pour le téléchargement, cela est possible en utilisant FormDataMultiPart, je voudrais une solution similaire pour le téléchargement ...

+0

Dans le code client, vous devez lire l'entité de réponse comme flux d'entrée - 'InputStream responseStream = response.readEntity (InputStream.class);' et ensuite lire ce flux pour obtenir le contenu réel du fichier. –

+0

Essayez d'utiliser un type de retour Response, puis dans le code client, vous pouvez appeler 'response.get (InputStream.class)' – vikarjramun

Répondre

0

Ok, a trouvé une solution de travail en utilisant un objet javax.ws.rs.core.Response comme type de retour:

code serveur:

public Response downloadFile(String uniqueId){ 
    InputStream inputStream = filePersistenceService.read(uniqueId); 
    Response.ok(outputStream -> IOUtils.copy(inputStream, outputStream)).build() 

}

code client:

Response response = client.downloadFile(uniqueId); 
InputStream resultInputStream = response.readEntity(InputStream.class); 

Cela fonctionne très bien avec les clients générés par org.glassfish.jersey.client.proxy.WebResourceFactory.