【问题标题】:Post large JSON object using ajax request使用 ajax 请求发布大型 JSON 对象
【发布时间】:2019-03-28 09:43:14
【问题描述】:

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

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

我该如何解决这个问题?

我使用的是 Wildfly 10 和 java 8。我可以增加任何帖子大小参数吗?

【问题讨论】:

  • 这似乎是您的服务器为文件上传设置的最大限制。

标签: java ajax spring-mvc wildfly


【解决方案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();
}

【讨论】:

    【解决方案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"/>
    

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-12-08
      • 2018-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多