9

Jersey を使用して CSV ファイルで応答するレスト コールを作成しました。

残りの呼び出しコードは次のとおりです。

@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 呼び出しを使用してその csv に応答します。これは完全に正常に機能しています。しかし、今では要件が変更されました。メモリ内のファイル コンテンツをストリーミングし、Rest API から csv 形式で応答します。
メモリ内のファイルへのストリーミングと、REST でのコンテンツへの応答を行ったことはありません。

誰かがこれで私を助けることができますか?

前もって感謝します。

4

1 に答える 1

15

応答エンティティとして StreamingResponse を使用する必要があります。私のプロジェクトでは、バイト配列からこれらを返す簡単な方法を作成しました。最初にファイルをバイトに準備してから、これを呼び出す必要があります。

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

次に、メインメソッドで次のようにします。

return Response.ok(getOut(byteArray)).build(); //add content-disp stuff here too if wanted
于 2013-08-20T18:59:51.593 に答える