在使用Spring Boot應用的時候,發現在post請求(以form表單形式提交)數據量過大的情況下,會導致后台接收不到值(參數為對象,對象中任何key對應的值都為空)。
通過查看內置tomcat包的源碼可以發現,Spring Boot應用中post請求數據量大小默認為2097152個字節(2M),當超過這一數據量的時候,就會導致后台接收參數為空。
因此可以對症下葯嘗試着將post請求數據量大小限制加大(或去除)來解決問題,這樣的嘗試可以有兩種方式。
1.硬編碼的方式。
@Configuration public class HttpMaxPostSizeConfiguration { // Set maxPostSize of embedded tomcat server to 10 megabytes (default is 2 MB, not large enough to support file uploads > 1.5 MB) @Bean EmbeddedServletContainerCustomizer containerCustomizer() throws Exception { return (ConfigurableEmbeddedServletContainer container) -> { if (container instanceof TomcatEmbeddedServletContainerFactory) { TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container; tomcat.addConnectorCustomizers( (connector) -> { connector.setMaxPostSize(10485760); // 10 MB } ); } }; } }
2.配置文件的方式。
server :
tomcat:
max-http-post-size: 10485760
其值為Integer類型,取值范圍沿用Interger類型的取值范圍,此外還可以將值設置為-1,表示不限制大小。
更多的,如果Spring Boot應用是部署在Spring Cloud(微服務)環境下,應該先在網關服務內配置此屬性。
經過小心翼翼的嘗試,問題得以解決。
"how are you?"
" ̶s̶a̶d̶,̶ ̶b̶r̶o̶k̶e̶n̶,̶ ̶d̶e̶f̶e̶a̶t̶e̶d̶,̶ ̶c̶r̶u̶s̶h̶e̶d̶,̶ ̶l̶o̶n̶e̶l̶y̶,̶ ̶f̶a̶l̶l̶i̶n̶g̶ ̶a̶p̶a̶r̶t̶ i'm fine."