2013-08-20 15 views
9

Ich habe einen Rest Anruf erstellt, der mit der CSV-Datei mit Jersey reagiert.Jersey Rest und CSV Antwort

Rest Anruf-Code ist:

@GET 
@Path("/ReportWithoutADEStatus") 
@Produces({ "application/ms-excel"}) 
public Response generateQurterlyReport(){ 
    QuarterlyLabelReport quartLabelReport = new QuarterlyLabelReport(); 
    String fileLoc=quartLabelReport.generateQurterlyLblRep(false); 
    File file=new File(fileLoc); 
    return Response.ok(fileLoc,"application/ms-excel") 
      .header("Content-Disposition","attachment;filename=QuarterlyReport_withoutADE.csv") 
      .build(); 
} 

Der obige Code liest eine CSV-Datei in einem temporären Speicherort erstellt und antwortet, dass die CSV-Rest-Aufruf. Das funktioniert einwandfrei. Aber jetzt hat sich die Anforderung geändert. Streamen Sie den Dateiinhalt im Speicher und antworten Sie im CSV-Format von Rest API.
Ich habe noch nie in eine Datei im Speicher gestreamt und den Inhalt in REST zurückgegeben.

Kann mir jemand dabei helfen?

Vielen Dank im Voraus.

Antwort

15

Sie müssen eine StreamingResponse als Antworteinheit verwenden. In meinen Projekten habe ich eine einfache Methode entwickelt, um diese aus einem Byte-Array zurückzugeben. Sie müssen nur bereit, um die Datei in ein Byte sind zuerst, dann nennen dies:

private StreamingOutput getOut(final byte[] excelBytes) { 
    return new StreamingOutput() { 
     @Override 
     public void write(OutputStream out) throws IOException, WebApplicationException { 
      out.write(excelBytes); 
     } 
    }; 
} 

dann in Ihre Hauptmethode würden Sie so etwas wie:

return Response.ok(getOut(byteArray)).build(); //add content-disp stuff here too if wanted 
+0

Es funktionierte. Danke für die Lösung. – ram

+0

Können Sie die Antwort als akzeptiert markieren, wenn dies gelöst ist. Vielen Dank! –

+0

was ist mit flush? – Dejell