SpringMVC之文件上傳異常處理

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

  首先配置CommonsMultipartResolver,必須開啓resolveLazily,該參數表示延遲解析,不然沒法在Controller拋出異常web

<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:spring

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

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

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

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", "文件太大!");
    }
    
}

  該方法也能實現同樣的效果,可是它是針對全局的。對於全局的異常處理器來講,處理確定不能這麼寫,這裏只是演示寫法而已...htm

相關文章
相關標籤/搜索