Опубликовать большой объект JSON с помощью ajax-запроса

#java #ajax #spring-mvc #wildfly

#java #ajax #spring-mvc #wildfly

Вопрос:

Мне нужна помощь с отправкой большого объекта JSON на сервер с использованием ajax в angularjs. Когда я отправляю объект JSON с примерно 10000 записями в ArrayList запросе с использованием post, он принимается, и я получаю ответ на то же самое.Но когда я загружаю 30000 записей или более и пытаюсь отправить его с помощью ajax, возвращается следующая ошибка :-

 [io.undertow.request] (default task-5) UT005007: Request was not fully consumed
  

Как я могу это исправить?

Я использую Wildfly 10 и java 8. Есть ли какой-либо параметр размера записи, который я могу увеличить?

Комментарии:

1. Кажется, это максимальный предел, установленный вашим сервером для загрузки файла.

Ответ №1:

Похоже, вы используете Undertow для получения запроса POST. Проверьте, каково значение MAX_ENTITY_SIZE параметра в вашей настройке, возможно, оно было ограничено:

Максимальный размер объекта запроса по умолчанию. Если тело объекта больше этого предела, то в какой-то момент при чтении запроса будет выдано java.io.IOException (при первом чтении для запросов фиксированной длины, когда было прочитано слишком много данных для запросов с фрагментами). Это значение является только размером по умолчанию, обработчик может переопределить это для отдельного запроса путем вызова io.undertow.server.HttpServerExchange.setMaxEntitySize(long size) . По умолчанию значение неограниченно.

Как было предложено в этом потоке, это потенциально настраивается весной с использованием MultipartConfigFactory компонента:

 @Bean
public MultipartConfigElement multipartConfigElement() {
     MultipartConfigFactory factory = new MultipartConfigFactory();
     factory.setMaxFileSize("100MB");
     factory.setMaxRequestSize("100MB");
     return factory.createMultipartConfig();
}
  

Ответ №2:

Предложение, сделанное @KarolDowbecki, скорее всего, сработает, но есть и другой способ. В standalone.xml используемом файле вы можете изменить из:

 <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
  

Для:

 <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true" max-post-size="16777216"/>
  

увеличить, в данном случае, до 16 МБ. Значение по умолчанию равно 10 МБ, по крайней мере, для Wildfly 16.

В качестве альтернативы, если вы хотите написать сценарий, чтобы вам не приходилось изменять его вручную standalone.xml , вы можете использовать jboss-cli и запустить:

 /subsystem=undertow/server=default-server/http-listener=default/:write-attribute(name=max-post-size,value=16777216)