java - Spring MVC @ExceptionHandler 未能捕获异常

标签 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>

即使在生成响应时出现异常,一切也能正常工作。唯一的问题是当有人试图上传大于 ma​​xUploadSize 的文件时。在这种情况下,exceptionHandler 不会捕获异常,服务会返回由 MaxUploadSizeExceededException 引起的难看的内部 Error 500

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

最佳答案

据我所知,这些异常是在数据绑定(bind)期间抛出的,在实际到达 Controller 之前,因此导致 500 并且没有调用异常处理程序方法。

到目前为止,我想出的唯一方法是让 Controller 实现“HandlerExceptionResolver”并提供实现:

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

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

关于java - Spring MVC @ExceptionHandler 未能捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14344698/

相关文章:

java - Spring根应用上下文和servlet上下文混淆

jquery - 拖动子元素时触发父元素的“dragleave”

java - Java SE 应用程序生命周期是什么......或者它没有生命周期?

java - 我的 Android 应用程序崩溃了,不理解 Eclipse 中的 Logcat

构建期间的 Spring 错误

java - Spring Security - 405请求方法 'POST'不支持

PHP文件上传更改文件名保留扩展名

javascript - 使用 jquery 动态添加文件输入?

java - 如何将参数传递给 Google App Engine servlet?

java - 关闭套接字过程