一般情況下,對上傳的文件會進行大小的限制。如果超過指定大小時會拋出異常,一般會對異常進行捕獲並友好的顯示出來。以下用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", "文件太大!"); } }
該方法也能實現一樣的效果,但是它是針對全局的。對於全局的異常處理器來說,處理肯定不能這么寫,這里只是演示寫法而已...