2017-10-11 4 views
1

Ich generiere automatisch die JAX-RS-Schnittstellen von Swagger. Ich benutze Jersey 2.25.1.JAX-RS/Jersey 2 Dateidownload - Gibt es eine gemeinsame API für Server und generierten Client-Proxy

Alles funktioniert gut für die meisten Anwendungsfälle. Wir haben die gleiche Schnittstelle für die Server- und Client-Teile. Clients werden über die Schnittstelle mit org.glassfish.jersey.client.proxy.WebResourceFactory generiert.

Jetzt muss ich Datei-Download über Streaming (Dateien werden riesig sein, in der Regel im Gigabyte-Bereich, so dass Streaming erforderlich ist) zu implementieren.

kann ich die folgende Signatur für den Server verwenden:

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

Aber StreamingOutput kann nicht offensichtlich in dem Client verwendet werden.

Gibt es eine Funktion in JAX-RS/Jersey, um eine gemeinsame Schnittstelle zwischen Server und Client zu haben?

Ich habe für den Upload zu sehen ist, ist das möglich FormDataMultiPart verwenden, würde ich eine ähnliche Lösung wie zum Download ...

+0

Im Client-Code müssen Sie die Response-Entity als Eingabestream lesen - 'InputStream responseStream = response.readEntity (InputStream.class);' und dann diesen Stream lesen, um den tatsächlichen Dateiinhalt abzurufen. –

+0

Versuchen Sie, einen Antwortrückgabetyp zu verwenden, und rufen Sie dann im Clientcode 'response.get (InputStream.class)' auf – vikarjramun

Antwort

0

Ok, eine funktionierende Lösung unter Verwendung eines javax.ws.rs.core.Response Objekt als Rückgabetyp gefunden:

Server Code:

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

}

Code Auftraggeber:

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

Dies funktioniert gut mit Clients, die von org.glassfish.jersey.client.proxy.WebResourceFactory generiert werden.

Verwandte Themen