2017-09-04 96 views
0

我嘗試從控制器向AJAX success()回調返回數據。該代碼完美適用於100,000個對象。但是,當我將列表大小增加到1百萬個對象時,它將轉到success()回調,但返回null作爲響應。你能幫我找到回報100萬個物品的方法嗎?ajax從彈簧控制器返回大量數據的空值

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。 嘗試直接返回你的清單,並讓Spring處理JSON處理您:

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

我也試過。它適用於100 000條記錄,但不適用於100萬條記錄。 100萬返回null – HelloWorld

0

有由服務器和彈簧也可能限制。檢查這link

在這種情況下,您應該主要看到超出限制的日誌中的錯誤。