SpringMVC之文件上傳異常處理


  一般情況下,對上傳的文件會進行大小的限制。如果超過指定大小時會拋出異常,一般會對異常進行捕獲並友好的顯示出來。以下用SpringMVC之文件上傳進行完善。

  首先配置CommonsMultipartResolver,必須開啟resolveLazily,該參數表示延遲解析,否則無法在Controller拋出異常

<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="resolveLazily" value="true" />
    <property name="defaultEncoding" value="utf-8" />
    <property name="maxUploadSize" value="100" />
</bean>

  現在,當文件超過指定大小時就會拋出異常了,接着就是捕獲異常了。該上傳的Controller中加入該方法用來捕獲MaxUploadSizeExceededException:

@ExceptionHandler(MaxUploadSizeExceededException.class)   
public ModelAndView handleException(Exception e) throws Exception {
    return new ModelAndView("upload").addObject("msg", "文件太大!");
}

  注意,該方法的參數不能含有Model。

  以上這種方法只會捕獲該Controller拋出的異常,如果想定義全局的異常處理器,可使用@ControllerAdvice

package cn.powerfully.demo.web.controller;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.servlet.ModelAndView;

@ControllerAdvice
public class ExceptionResolver {
    
    @ExceptionHandler(MaxUploadSizeExceededException.class)
    public ModelAndView handlerMaxUploadSizeExceededException(MaxUploadSizeExceededException e){
        return new ModelAndView("upload").addObject("msg", "文件太大!");
    }
    
}

  該方法也能實現一樣的效果,但是它是針對全局的。對於全局的異常處理器來說,處理肯定不能這么寫,這里只是演示寫法而已...


免責聲明!

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



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