我有以下情况。我用下面的方法配置了一个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版本开始的,我假设它已经被合并,或者找到了一种更好的方法来处理这些情况。
任何关于如何处理这一问题的想法都将不胜感激。
谢谢。
发布于 2012-11-09 02:25:28
在您的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).
}
}请注意,“验证/psv/同意”是抛出此异常的地方,也是它需要返回的地方。我们只有一个页面可以上传文件。
显然,errorMessage只是传递给视图的一个参数,因此需要像错误消息一样处理和显示。您可能还需要重新填充已提交的任何其他表单域。不过,希望这是一个正确的方向。
https://stackoverflow.com/questions/13117353
复制相似问题