2016-11-21 8 views
2

У меня есть JSON, который выглядит более или менее, как это:Как разместить большую строку/JSON с помощью AJAX на Play Framework 1.4.x

{"id":"id","date":"date","csvdata":"csvdata".....}

где csvdata свойство большой объем данных в JSON. Я пытался установить этот JSON с помощью AJAX в Play! Framework 1.4.x, поэтому я так поступил, но когда я получаю данные на стороне сервера, csvdata выглядит как [object Object] и сохраняет его в моем db.

Моя первая мысль, чтобы решить это было отправить csvdata JSON в виде строки, чтобы сохранить его как LONGTEXT, но когда я пытаюсь сделать это, мой запрос не со следующей ошибкой:

413 (Request Entity Too Large)

И консольная игра показать мне это сообщение:

Number of request parameters 3623 is higher than maximum of 1000, aborting. Can be configured using 'http.maxParams'

Я также попытался добавить http.maxParams = 5000 в application.conf, но единственным результатом является консоль, игра ничего не говорит d в моей базе данных это поле хранится как null.

Может ли кто-нибудь помочь мне или предложить другое решение моей проблемы?

Спасибо вам большое.

+0

Вы можете проверить содержимое поля 'cvsdata' в вашем контроллере с помощью' http.maxParams = 5000'? –

+0

Привет @ RémiLavolée Я проверил его, используя JPDA на Eclipse. С http.maxParams = 5000 мой контроллер ничего не получает, пустая строка, но в консоли у меня нет сообщения об ошибке. –

+0

Хорошо. Нам нужно знать, откуда эта проблема. Попробуйте отправить световую версию 'csvdata'? Как вы десериализуете содержимое json в контроллере? –

ответ

0

Возможно ли, что вы отправили «csvdata» как массив, а не строку? Каждый элемент в массиве будет отдельным параметром. Я отправил строки 100 Кбайт с использованием AJAX и не попал в предел http.maxParams. Вы можете проверить содержимое тела запроса с помощью инструментов разработчика вашего браузера.

Если ваш csvdata является файлом на компьютере клиента, то самым простым способом его отправки является файл. Действие вашего контроллера будет выглядеть так:

public static void upload(String id, Date date, File csv) { 
    ... 
} 

When Play! привязывает параметр к типу File, он записывает содержимое параметра во временный файл, который вы можете прочитать. (Это позволяет избежать нехватки памяти, если загружен большой файл.) Тип параметра File был разработан для нормальной формы submit, но я использовал его в AJAX, когда браузер поддерживал некоторые функции HTML5 (File API и Form Data).