首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Spring WebFlow中处理来自CommonsMultipartResolver的SizeLimitExceededException?

如何在Spring WebFlow中处理来自CommonsMultipartResolver的SizeLimitExceededException?
EN

Stack Overflow用户
提问于 2012-10-29 15:14:50
回答 1查看 4.7K关注 0票数 6

我有以下情况。我用下面的方法配置了一个CommonsMultipartResolver bean。

代码语言:javascript
运行
复制
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="2100000" />

我在Spring Web Flow视图状态jsp中有几个文件上传域。

如果文件低于限制,一切正常,但是如果文件超过2MB-s的限制,我必须在表单的绑定结果中添加一个验证错误。

我的问题是,当超过文件限制时,多部分文件解析器会抛出org.apache.commons.fileupload.FileUploadBase.SizeL imitExceededException异常,而我无法在Spring Web Flow中捕获此异常并将我的FieldError添加到表单中。

我尝试使用了转换标记的on-exception属性,但是如果我理解正确的话,它只适用于Spring Web Flow中抛出的异常。

我也尝试过在spring mvc中使用SimpleMappingExceptionResolver,但我不想重定向到页面,我想处理这个异常。

我还发现了这个:https://jira.springsource.org/browse/SWF-158

但它是从1.0版本开始的,我假设它已经被合并,或者找到了一种更好的方法来处理这些情况。

任何关于如何处理这一问题的想法都将不胜感激。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-09 02:25:28

在您的SimpleMappingExceptionResolver中,您应该能够覆盖resolveException方法,确定要捕获的异常类型并进行适当的处理。

我在我们的项目中发现了一些旧代码,它们似乎是类似异常的解决方案;

代码语言:javascript
运行
复制
public class GeneralMappingExceptionResolver extends SimpleMappingExceptionResolver {

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

    if(exception instanceof MaxUploadSizeExceededException) {
        MaxUploadSizeExceededException maxe = (MaxUploadSizeExceededException)exception;
        String errorMessage = "Max filesize exceeded, please ensure filesize is too large.");
        HashMap<String, Object> model = new HashMap<String, Object>(2);
        model.put("errorMessage", errorMessage);
        return new ModelAndView("verification/psv/consent", model);
    } else {
        return super.resolveException(request, response, handler, exception); // Do whatever default behaviour is (ie throw to error page).
    }
}

请注意,“验证/psv/同意”是抛出此异常的地方,也是它需要返回的地方。我们只有一个页面可以上传文件。

显然,errorMessage只是传递给视图的一个参数,因此需要像错误消息一样处理和显示。您可能还需要重新填充已提交的任何其他表单域。不过,希望这是一个正确的方向。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13117353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档