2016-12-07 15 views
1

CSVを印刷して、JSONを送信してajax呼び出しに応答する必要があるメソッドがあります。競合GsonとCSV?

これは両方を含むコードです:

//Print of CSV 
ByteArrayOutputStream os = (ByteArrayOutputStream)builder.buildCsvToStream(tableDataMatrixTemp); 
getThreadLocalResponse().setContentType("text/csv"); 
getThreadLocalResponse().setHeader("Content-disposition", "attachment;filename=QuerySql_" + date + ".csv"); 

//Gson creation 
Gson gson = new Gson(); 
String objectJson = gson.toJson("OK"); 


OutputStream responseOutputStream = getThreadLocalResponse().getOutputStream(); 
os.writeTo(responseOutputStream); 
responseOutputStream.write(objectJson.getBytes("UTF-8")); 

AJAX呼び出しはJSON を受信しないと CSVは、(ダウンロードされていない)に印刷されていない、私はCSVとJSONが来たことを恐れます紛争時に誰かがこれを修正できますか?

+1

HTTP応答に含めることができるメディアタイプは1つだけです。複数のファイルを送信する場合は、HTTPの上にカスタムマジックを追加する必要があります。 –

答えて

2

サーバー側では、まだOutputStreamをフラッシュして閉じる必要があります。あなたがwindow.openによって、またはこのようなインラインフレームを作成することにより、いずれかのファイルをダウンロードする必要が先端側に

responseOutputStream.flush(); 
responseOutputStream.close(); 

$.post('/your-url', postData, function(retData) { 
    var iframe = document.createElement("iframe"); 
    iframe.setAttribute("src", retData.url); 
    iframe.setAttribute("style", "display: none"); 
    document.body.appendChild(iframe); 
}); 

は、それはあなたのためのトリックを行います願っています!

+0

えええええええええええええええええええええええええええええええええええええええええええええええええええええ、最後に、または、後にjsonを送りましたか? – Removed

+0

出力ストリームに書き込んだ後 –