有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring MVC@ExceptionHandler未能捕获异常

我正在使用Spring MVC来接收一个文件,该文件将与一个表单一起上传。这是我的控制器,它接收请求并处理可能的异常:

@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

我如何配置我的web应用程序来捕获这种异常?我希望使用@ExceptionHandlers,并且不必太多地更改项目结构


共 (1) 个答案

  1. # 1 楼答案

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

    到目前为止,我找到的处理您提到的问题的唯一方法是控制器实现“HandlerExceptionResolver”,并提供以下实现:

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

    我同意,它并不把优雅或灵活视为@ExceptionHandler。希望这有帮助