使用ajax请求发布大型JSON对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用ajax请求发布大型JSON对象相关的知识,希望对你有一定的参考价值。

我需要帮助使用angularjs中的ajax将大型JSON对象发布到服务器。当我使用post请求在ArrayList中发送大约10000条记录的JSON对象时,它被接受并且我得到相同的响应。但是当我上传30000条或更多记录并尝试使用ajax发送它时,它返回以下错误: -

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

我怎样才能解决这个问题?

我正在使用Wildfly 10和java 8.我可以增加任何帖子大小参数吗?

答案

您似乎正在使用Undertow来接收POST请求。检查您的设置中MAX_ENTITY_SIZE选项的值是多少,可能是有限的:

请求实体的默认最大大小。如果实体主体大于此限制,则在读取请求时将在某个时刻抛出java.io.IOException(在第一次读取固定长度请求时,当已经为分块请求读取了太多数据时)。此值仅为默认大小,处理程序可以通过调用io.undertow.server.HttpServerExchange.setMaxEntitySize(long size)为单个请求覆盖此值。默认为无限制。

正如在this thread中所建议的,这可能是在Spring中使用MultipartConfigFactory bean配置的:

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

另一答案

@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"/>

在这种情况下,增加到16MB。至少Wildfly 16的默认值为10MB。

或者,如果你想编写脚本,这样你就不必手动修改standalone.xml,你可以使用jboss-cli并运行:

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

以上是关于使用ajax请求发布大型JSON对象的主要内容,如果未能解决你的问题,请参考以下文章

如何使用一个ajax请求从java servlet返回多个json对象

AJAX请求提交数据

HTTP协议Ajax请求

ajax请求返回json字符串/json对象 处理

如何在 django 的 AJAX 请求中返回多个 JSON 对象

使用 jQuery 的 $.ajax() 将多个 Json 对象作为数据传递