2017-09-04 12 views
0

コントローラからAJAX success()コールバックにデータを返そうとしています。このコードは100,000個のオブジェクトに対して完全に機能します。しかし、リストのサイズを100万のオブジェクトに増やすとsuccess()コールバックに行きますが、nullをレスポンスとして返します。何百万というオブジェクトを返す方法を見つけるのを助けてくれますか?バネコントローラから大量のデータを取得するとajaxがnullを返す

A.$.ajax({ 
 
      url: 'getData', 
 
      dataType: 'json', 
 
      success: function (response) { 
 
      alert(response) 
 
      }

@RequestMapping("/getData") 
 
public @ResponseBody 
 
\t void download(HttpServletResponse response) throws IOException, JSONException 
 
\t { 
 
    List <Objects> list = getListFromService(); 
 
\t \t response.setContentType("application/json"); \t 
 
\t \t PrintWriter out = response.getWriter(); 
 
\t \t ObjectMapper mapper = new ObjectMapper(); 
 
\t \t String jsonString = mapper.writeValueAsString(list); 
 
\t \t out.print(jsonString); 
 
\t \t out.flush(); \t 
 
\t }

+1

なぜ、何百万ものオブジェクトを一度に返すのはなぜですか?多くのデータをユーザーにどのように提示しますか? – nnnnnn

+0

@nnnnnn私はcsvファイルにそれらをすべてダウンロードしてユーザーに提供したいと思います。私はコントローラのサーバー側でもできることを知っています。ちょうど両方のアプローチを試して、何が最良の方法であるかを考えたかった。しかし、私は思う、私はサーバー側のファイル生成 – HelloWorld

+0

おそらくあなたのサーバーが応答のサイズを制限していると思う - **ブラウザ**の**ツールコンソールとネットワークタブを確認してくださいこれの任意の指示のための –

答えて

0

あなたの方法は@ResponseBodyで注釈を付けているが、それの戻り値の型はvoidです。 直接あなたのリストを返すようにしてください、そして春はあなたのためのJSON処理を処理させる:

@RequestMapping("/getData") 
public @ResponseBody List<Objects> download() { 
    return getListFromService(); 
} 
+0

私もこれを試してみました。 100,000レコードでは動作しますが、100万レコードでは動作しません。 100万回のnull返却 – HelloWorld

0

あまりにもおそらくサーバーとバネにより設定された制限があります。これをチェックしてくださいlink

このような場合、限界を超えるためにログにエラーが発生することがほとんどです。

関連する問題