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

Bal*_*éla 6 spring-webflow spring-webflow-2 apache-commons-fileupload

我有以下情况.我有一个CommonsMultipartResolver bean以下面的方式配置.

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="2100000" />
Run Code Online (Sandbox Code Playgroud)

我在Spring Web Flow视图状态jsp中有一些文件上载字段.

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

我的问题是多部分文件解析器在超出文件限制时抛出org.apache.commons.fileupload.FileUploadBase.SizeL imitExceededException异常,我找不到在Spring Web Flow中捕获它的方法并将我的FieldError添加到形成.

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

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

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

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

任何关于如何处理这个问题的想法将不胜感激.

谢谢.

Nic*_*ote 4

在您的代码中SimpleMappingExceptionResolver,您应该能够重写该resolveException方法,确定捕获的异常类型并进行适当的处​​理。

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

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).
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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