6

我有以下情况。我有一个按以下方式配置的 CommonsMultipartResolver bean。

<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 版,我假设它已经被合并,或者找到了更好的方法来处理这些情况。

任何有关如何处理此问题的想法将不胜感激。

谢谢。

4

1 回答 1

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).
    }
}

请注意,“verification/psv/consent”是引发此异常的流程以及需要返回的流程。我们只有一个页面有文件上传。

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

于 2012-11-08T18:25:27.780 回答