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

时间:2019-03-28 09:43:14

标签: java ajax spring-mvc wildfly

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

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

我该如何解决?

我正在使用Wildfly 10和Java8。是否可以增加任何帖子大小参数?

2 个答案:

答案 0 :(得分:1)

您似乎正在使用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();
}

答案 1 :(得分:0)

@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)