我有一个春季启动应用程序,它使用多重上传来更新大量文件10K +。在那些情况下,我遇到了这个例外。我猜它正在查看我的"文件"参数并看到它是一个数组> 10K并标记此异常。我还发送了另一个参数,该参数是与文件列表相关联的字符串数组,其大小是文件数,> 10K
java.lang.IllegalStateException: More than the maximum number of request parameters (GET plus POST) for a single request ([10,000]) were detected. Any parameters beyond this limit have been ignored. To change this limit, set the maxParameterCount attribute on the Connector.
at org.apache.tomcat.util.http.Parameters.addParameter(Parameters.java:204) ~[tomcat-embed-core-8.5.11.jar:8.5.11]
at org.apache.catalina.connector.Request.parseParts(Request.java:2860) ~[tomcat-embed-core-8.5.11.jar:8.5.11]
at org.apache.catalina.connector.Request.parseParameters(Request.java:3177) ~[tomcat-embed-core-8.5.11.jar:8.5.11]
at org.apache.catalina.connector.Request.getParameter(Request.java:1110) ~[tomcat-embed-core-8.5.11.jar:8.5.11]
at org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:381) ~[tomcat-embed-core-8.5.11.jar:8.5.11]
我理解异常,但我想弄清楚application.properties
我可以调整的地方。我在那里设置了spring.http.multipart.max-file-size
和spring.http.multipart.max-request-size
。我在source maxParameterCount
找不到与@Configuration
public class TomcatCustomizationConfiguration {
@Bean
public TomcatEmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory() {
final int maxHttpRequests = 50000;
TomcatEmbeddedServletContainerFactory tomcatFactory = new TomcatEmbeddedServletContainerFactory();
tomcatFactory.addConnectorCustomizers(connector -> connector.setMaxParameterCount(maxHttpRequests));
return tomcatFactory;
}
}
相同的内容。
此外,假设有一种方法我可以为使用spring boot(嵌入式tomcat)本地运行的实例设置它,更改是否也可以在deploymenet环境中运行,或者是否需要更改tomcat配置?
更新:我发现一个解决方案在使用spring boot本地运行时有效。我假设,因为这正在改变Tomcat嵌入式实例,这不适用于部署的完整tomcat环境 - 我想知道是否有一个可以在两个tomcat实例中使用的解决方案。
{
"albumName": "my album",
"photos": [photo1Id, photo2Id, photo3Id]
}
答案 0 :(得分:0)
根据Spring documentation,您可以通过扩展WebServerFactoryCustomizer自行添加缺少的配置:
<块引用>如果您的用例不存在配置键,那么您应该查看 WebServerFactoryCustomizer。您可以声明这样一个组件并访问服务器工厂和所选的网络堆栈。
由于还没有 server.tomcat.max-parameter-count
配置,您可以像 OP 配置代码一样添加它:
@Configuration
public class TomcatCustomizationConfiguration implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
@Value("${server.tomcat.max-parameter-count:10000}")
private int maxParameterCount;
@Override
public void customize(TomcatServletWebServerFactory factory) {
factory.addConnectorCustomizers(connector -> connector.setMaxParameterCount(maxParameterCount));
}
}
注意我实际上在 this 博客上找到了解决方案。