无法提交具有多个(超过256个)值的表单

14

我正在使用Spring Boot 1.2.2和Thymeleaf。我的问题是,我尝试在表单中发布一长串项目(一些标签,一个复选框),但是不能执行我的列表中的太多项目。(我测试了小列表并且它可以工作。)

起初我使用jetty,但是出现了错误,错误信息如下:

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

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

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的限制吗?我不想分页显示结果。感谢任何帮助。


(-1 as no limit) 我在Thymeleaf表单中设置了method="post"。是否有其他方法可以增加256的限制?我不想分页显示结果。谢谢任何帮助。

只是一个快速的评论。我正在使用Spring Boot 1.3.3,当我设置server.tomcat.max-http-header-size=0时,它实际上并没有改变配置。通过代码步进,这意味着使用默认值,即8192。我将其设置为一个较大的值65536,然后它就起作用了。 - Uncle Long Hair
1个回答

22

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

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

在Spring论坛中检查线程,还可以在官方文档这里找到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接