不能 post 形成许多(超过 256 个)值

Can not post form with many (over 256) values

我正在使用 Spring Boot 1.2.2 和 Thymeleaf。 我的问题是我尝试 post 表单中的一长串项目(一些标签,一个复选框),这无法执行我列表中的那么多项目。 (我测试了小列表并且它起作用了。)

首先我使用了 jetty 但出现了一个错误,上面写着:

java.lang.IllegalStateException: Form too many keys
at org.eclipse.jetty.util.UrlEncoded.decodeUtf8To(UrlEncoded.java:526)

我搜索并看到了这个 post。结果我添加了

applicationDefaultJvmArgs = ["-Dorg.eclipse.jetty.server.Request.maxFormKeys=8000"]

给我的 gradle.build,但没有成功。结果我切换到 Tomcat 并且它再次失败。错误信息是:

java.lang.IndexOutOfBoundsException: Index: 256, Size: 256
at java.util.ArrayList.rangeCheck(ArrayList.java:635)

貌似只能执行256个条目。我有大约 500 个条目。所以我认为增加 maxhttpheadersize 会有所帮助,并将此行添加到我的 application.properties:

server.tomcat.max-http-header-size=-1

(-1 作为无限制) 我在我的 Thymeleaf 表单中设置了 method="post"。任何其他方式来增加 256 限制?我不想对我的结果进行分页。感谢您的帮助。

我认为这与 Spring 中的 AutoGrowCollectionLimit 有关,请尝试将此代码包含在您的控制器中以增加它:

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.setAutoGrowCollectionLimit(768);
}

检查this thread in Spring forum, also in the official documentation here