无法发布包含多个(超过 256 个)值的表单

问题描述 投票:0回答:2

我正在使用 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 的限制吗?我不想对我的结果进行分页。感谢您的帮助。

spring-boot thymeleaf embedded-jetty embedded-tomcat-8
2个回答
22
投票

我认为这与Spring中的

AutoGrowCollectionLimit
有关,尝试在你的控制器中包含此代码以增加它:

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

检查 Spring 论坛中的 this 线程,也在官方文档中这里


0
投票

我试过了,但还是不行

© www.soinside.com 2019 - 2024. All rights reserved.