5

我有以下情況。我有以下方式配置的CommonsMultipartResolver bean。如何處理Spring WebFlow中CommonsMultipartResolver的SizeLimitExceededException?

<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的形式。

我嘗試使用過渡標籤上的異常屬性,但如果我理解正確的話它僅適用於那些Spring Web Flow的內拋出的異常。

我也試過Spring MVC中使用的SimpleMappingExceptionResolver,但我不想重定向到一個網頁,我想處理這個異常。

我也發現了這一點:https://jira.springsource.org/browse/SWF-158

但是,從版本1.0的,我假設這已經因爲或者更好的辦法,發現來處理這些情況中。

任何想法如何處理這將不勝感激。

謝謝。

回答

3

在你的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只是傳遞到視圖中的參數,以便將需要處理和類似的錯誤消息顯示。您可能還需要重新填充提交的其他任何表單字段。希望這是一個正確的方向。

相關問題