最近在項目里進行全局異常處理時,上傳文件超過配置大小,異常被捕獲,但是接口直接報500錯誤,且沒有任何返回值。
從后台報錯日志來看,異常已經被全局異常處理捕獲到了,並且也已經完成響應,為什么前端看不到任何返回呢?
查找了很多資料,一直以為是全局返回的緣故,所以一直解決不了,於是轉變方向,從上傳文件異常方向入手。
終於還是有結果了。博客是這么描述得:springboot 文件上傳超過配置文件大小,多次進入異常處理返回,從而多次響應,導致前端拿不到錯誤信息,不管是不是,試試就知道了。
解決方法,需要配置tomcat的connector的MaxSwallowSize為-1(無限制)或者大於等於spring中單個請求的文件上傳打大小,建議設置大於等於spring的配置,另外spring boot暫未提供該屬性的自定義配置,需要手動創建tomcat來配置connector
在啟動類中添加如下配置:
@Bean
public ServletWebServerFactory tomcatEmbedded() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
// connector other settings...
// configure maxSwallowSize
if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol<?>)) {
// -1 means unlimited, accept bytes
((AbstractHttp11Protocol<?>)
connector.getProtocolHandler()).setMaxSwallowSize(-1);
}
});
return tomcat;
}
然后再進行測試,發現問題解決。

