2013-08-20 8 views
9

Utworzono połączenie przychodzące, które odpowiada ponownie za pomocą pliku CSV z Jersey.odpoczynek koszulki i odpowiedź csv

reszta kod wywoławczy wynosi:

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

Powyższy kod odczytuje plik csv utworzony w miejscu temp i odpowiada, że ​​plik CSV przy użyciu połączenia odpoczynku. To działa doskonale. Ale teraz wymagania się zmieniły. przesyłać strumieniowo zawartość pliku w pamięci i odpowiadać w formacie CSV z interfejsu API odpoczynku.
Nigdy nie robiłem strumieniowania do pliku w pamięci i odpowiadanie zawartości w trybie REST.

Czy ktoś może mi w tym pomóc?

Z góry dziękuję.

Odpowiedz

15

Musisz użyć StreamingResponse jako swojej jednostki odpowiedzi. W moich projektach stworzyłem prostą metodę zwracania ich z tablicy bajtów. Po prostu trzeba gotowy plik na bajt jest pierwszy, a potem nazywają to:

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

Następnie w głównym sposobem byś coś takiego:

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

to działało. Dzięki za rozwiązanie. – ram

+0

Można oznaczyć odpowiedź jako zaakceptowaną, jeśli zostanie ona rozwiązana. Dzięki! –

+0

co z flush? – Dejell

Powiązane problemy