2013-08-20 8 views
9

मैंने एक बाकी कॉल बनाया है जो जर्सी का उपयोग कर सीएसवी फ़ाइल के साथ प्रतिक्रिया देता है।जर्सी आराम और सीएसवी प्रतिक्रिया

बाकी कॉल कोड है:

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

ऊपर कोड एक अस्थायी स्थान में बनाए गए एक csv फ़ाइल पढ़ता है और कि सीएसवी बाकी कॉल का उपयोग कर प्रतिक्रिया करता है। यह पूरी तरह से ठीक काम कर रहा है। लेकिन अब आवश्यकता बदल गई है। मेमोरी में फ़ाइल सामग्री स्ट्रीम करें और बाकी एपीआई से सीएसवी प्रारूप में जवाब दें।
मैंने कभी भी स्मृति में फ़ाइल में स्ट्रीमिंग नहीं की है और REST में सामग्री का जवाब नहीं दिया है।

क्या कोई मेरी मदद कर सकता है?

अग्रिम धन्यवाद।

उत्तर

15

आपको अपनी प्रतिक्रिया इकाई के रूप में स्ट्रीमिंग रीस्पॉन्स का उपयोग करने की आवश्यकता है। मेरी परियोजनाओं में मैंने इन्हें बाइट सरणी से वापस करने के लिए एक सरल विधि बनाई है।

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

यह काम किया: अपने मुख्य विधि आप की तरह कुछ होगा तो

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

: तुम बस तैयार करने के लिए एक बाइट में फ़ाइल है पहले स्थान पर है, तो यह कहते हैं। समाधान के लिए धन्यवाद। – ram

+0

यदि आप हल हो जाते हैं तो उत्तर को स्वीकृत के रूप में चिह्नित कर सकते हैं। धन्यवाद! –

+0

फ्लश के बारे में क्या? – Dejell

संबंधित मुद्दे