Spring MVC @ExceptionHandler无法捕获异常

时间:2013-01-15 18:45:47

标签: java spring-mvc file-upload exception-handling multipartform-data

我正在使用 Spring MVC 来接收使用表单上传的文件。这是我的 Controller ,它接收请求并处理可​​能的异常:

@RequestMapping(method = RequestMethod.POST, 
                headers = {"content-type=multipart/form-data"}, 
                produces = "application/xml")
public @ResponseBody MyStuff processFormUpload( @RequestParam("file") CommonsMultipartFile file) throws 
    //return beautiful xml response generated from the input file;
}

@ExceptionHandler(Exception.class)
public ModelAndView exceptionHandler(Exception ex, HttpServletResponse response) {
    //return pretty exception page;
}

这是我初始化文件解析器的方法:

<bean id="multipartResolver"
      class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="100000"/>
</bean>

即使在生成响应时引发异常,一切也都能很好地工作。唯一的问题是当有人试图上传大于 maxUploadSize 的文件时。在这种情况下,exceptionHandler不会捕获异常,并且服务返回由MaxUploadSizeExceededException引起的丑陋的内部错误500

如何配置我的网络应用以捕获此类异常?我想使用@ExceptionHandlers而不必过多地更改项目结构。

1 个答案:

答案 0 :(得分:1)

据我所知,在实际到达控制器之前,在数据绑定期间会抛出这些异常,因此导致500并且不调用异常处理程序方法。

到目前为止,我已经想出处理你提到的内容的唯一方法是让控制器实现'HandlerExceptionResolver'并提供实现:

    public ModelAndView resolveException(HttpServletRequest request,
        HttpServletResponse response, Object handler, Exception exception)

我同意,它并不像@ExceptionHandler那样优雅或灵活。希望这会有所帮助。