【问题标题】:how to handle MaxUploadSizeExceededException at controller如何在控制器处理 MaxUploadSizeExceededException
【发布时间】:2014-07-16 04:56:41
【问题描述】:

当文件上传大小超过时面临以下异常。我想在上传文件大小超过时显示用户友好的异常。但它没有命中控制器来处理异常。

例外:

 HTTP Status 500 - Request processing failed; nested exception is org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size of 20 bytes exceeded; nested exception is org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (2536) exceeds the configured maximum (20).

【问题讨论】:

  • 您已经设置了异常处理程序,并且它们正在其他地方工作?那么错误的堆栈跟踪是什么
  • @NimChimpsky ,请参阅上面编辑过的帖子。
  • 在resolveException方法中,你作为modelAndView传递了什么?
  • 看起来你的 HandlerExceptionResolver 没有被调用 - resolveException 中的字符串消息没有反映在堆栈跟踪中的任何地方。
  • @Prasad,终于明白了,它去了 ExceptionHandler 类,但另一个问题是当我上传超过文件限制大小(4MB)的文件时,我不想上传它,我想要向客户端显示错误消息,但作为其默认行为,它尝试上传文件可能在缓存中,我现在注意到了,并且花费大量时间可能超过 5 分钟才能返回索引页面并显示错误消息用户。一旦完成,我将发布完整的示例。请提出建议。

标签: spring-mvc


【解决方案1】:

如果您的异常堆栈跟踪显示请求正在访问 dispatcherservlet 并因此访问控制器 - 那么您的 @exceptiohandler 方法设置不正确 (section 16.11.2 @ExceptionHandler)。

否则,如果堆栈跟踪显示在此之前抛出异常......那是什么?

【讨论】:

  • 如上所述,它没有命中控制器并且堆栈跟踪是“HTTP 状态 500 - 请求处理失败;嵌套异常是 org.springframework.web.multipart.MaxUploadSizeExceededException:最大上传大小超过 20 个字节;嵌套异常是 org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException:请求被拒绝,因为它的大小 (2536) 超过了配置的最大值 (20)。”请参阅上面编辑的帖子。
  • 发布错误的堆栈跟踪,对我来说,它看起来像是在命中控制器,而 apache commons 正在抛出您没有捕获的错误,因此返回 500
  • 请参阅上面的帖子以获取堆栈跟踪,它没有命中控制器,我将调试点保持在控制器并检查它没有命中。
  • 在命中方法体之前,它通过 sprign 绑定到 multipartresolver,但它仍然会抛出控制器异常,stacktrace 需要这样i.stack.imgur.com/GrKgq.png
猜你喜欢
  • 2011-02-11
  • 2015-04-25
  • 1970-01-01
  • 2012-02-18
  • 2021-09-18
  • 2015-03-17
  • 1970-01-01
  • 2019-11-17
  • 2012-01-03
相关资源
最近更新 更多