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

相关文章
相关标签/搜索