springboot上傳文件過大,全局異常捕獲,客戶端沒有返回值


最近在項目里進行全局異常處理時,上傳文件超過配置大小,異常被捕獲,但是接口直接報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;
    }

 然后再進行測試,發現問題解決。

 

 

 

 

參考:SpringBoot 2.0.0新版和SpringBoot1.5.2版本中Tomcat配置的差別(坑)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM