2017-01-12 7 views
0

私は書いているWebアプリケーションのサーバー側を実行するためにsparkを使用しています。私は少しドキュメントを捜したが、私は空になった。フロントエンドにデータを提供して、自動的にCSVファイルとしてユーザにダウンロードする方法はあるのだろうか?私がcsvとして提供しようとしている私のデータは、このように見えます。java sparkを使用してcsvファイルを提供するにはどうすればよいですか?

// example data... returned by "getData()" 

JSONArray test = new JSONArray() 
    .put(
     new JSONArray().put("foo").put("bar") 
    ) 
    .put(
     new JSONArray().put(1).put(2) 
    ); 


// route 
get("/csv/:path", "application/json", (req, res) -> { 
    res.type("text/csv"); 
    JSONArray reply = getData(req); 
    return data; 
}); 

私は、ドキュメントのResponseTransformersセクションを見てみましたが、私はダウンロード可能なcsvファイルの代わりに、JSONオブジェクトとしての私のデータを提供する方法を見つけ出すことができませんでした。私はResponseTransformerが何らかの形でサブクラス化する必要があると仮定していますが、私が望むことを行うための例は見つけられませんでした。誰かが私に例を提供することができますか、またはこれを行う方法を説明するいくつかのドキュメントの指示に私を指摘してください?

編集:私は、JavaScript側で、このような私のルートを呼び出すことができました。

window(route); 

私はコンピューター上でプログラムを選択して応答をダウンロードすることができました。しかし、データがかなりcsvファイルをので、近い

[["foo","bar"],[1,2]] 

メモ帳

で次のようになります..しかし、ではありません。私はアウトプットがこのように見えることを望んでいました。

foo,bar 
1,2 

答えて

1

私はthis answerがするように、あなたが、あなたのcsvファイルをレンダリングするためのStringBuilderを使用できると思います。私はまたあなたの要求の第2パラメータ"application/json"も削除できると思います。

// route 
get("/csv/:path", (req, res) -> { 
res.type("text/csv"); 
    StringBuilder sb = new StringBuilder(); 
    sb.append("id"); 
    sb.append(','); 
    sb.append("Name"); 
    sb.append('\n'); 

    sb.append("1"); 
    sb.append(','); 
    sb.append("Zack"); 
    sb.append('\n'); 
    return sb.toString(); 
}); 
+0

これは本当にトリックでした。あなたの受け入れを受け入れてください。 – Zack

+0

質問に続きます...メモ帳でこれを開いたときに、新しい行が効果を発揮しないのはなぜですか?私はWindowsのワードパッドで開くとき、私は期待通りに改行を参照してください。メモ帳は改行で気にしませんか? – Zack

+0

ファイルに改行を設定するには2通りの方法がありますが、これは歴史上の問題です。 ASCIIテーブルの文字10と13の両方が改行として受け入れられますが、これはさまざまな理由で変わる可能性があります。特に、返すファイルの文字エンコードを設定しなかった場合は、 'res.type(" text/csv; charset = UTF-8 ");'のようなUTF-8を使って、UTF-8に正しく設定されたテキストエディタでファイルを開きます。 –

関連する問題