5

Mam następującą sytuację. Mam bean CommonsMultipartResolver skonfigurowany w następujący sposób.Jak radzić sobie z wyjątkami SizeLimitExceededException od CommonsMultipartResolver w Spring WebFlow?

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
<property name="maxUploadSize" value="2100000" /> 

i mam kilka pól przesyłania plików w sieci przepływu Wiosna widok państwowej JSP.

Wszystko działa poprawnie, jeśli plik jest poniżej limitu, ale jeśli plik przekracza limit 2 MB, muszę dodać błąd sprawdzania poprawności do wyniku wiązania w moim formularzu.

Mój problem polega na tym, że program do przekształcania plików wieloczęściowych zgłasza wyjątek org.apache.commons.fileupload.FileUploadBase.SizeL imitExceededException po przekroczeniu limitu plików i nie mogę znaleźć sposobu na wychwycenie tego w Spring Web Flow i dodanie mój FieldError do formularza.

Próbowałem użyć atrybutu on-exception tagu przejścia, ale jeśli dobrze rozumiem, działa on tylko w przypadku wyjątków, które są zgłaszane w Spring Web Flow.

Próbowałem również użyć SimpleMappingExceptionResolver w wiosna mvc, ale nie chcę przekierować do strony, chcę obsłużyć ten wyjątek.

Znalazłam też to: https://jira.springsource.org/browse/SWF-158

Ale to od wersji 1.0 i jestem przy założeniu, że ta została włączona, ponieważ albo że lepszym sposobem okazało się obsługiwać takie sytuacje.

Wszelkie pomysły na to, jak sobie z tym poradzić, będą mile widziane.

Dzięki.

Odpowiedz

3

W swoim powinieneś być w stanie zastąpić metodę resolveException, określić typ uchwyconego wyjątku i odpowiednio go obsłużyć.

Znalazłem stary kod w naszym projekcie, który wydaje się być rozwiązaniem podobnego wyjątku;

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

Zauważ, że „weryfikacja/PSV/zgoda” jest przepływ gdzie wyjątek ten zostałby wyrzucony i dokąd musi wrócić. Mamy tylko jedną stronę, która ma plik do przesłania.

Oczywiście komunikat "komunikat o błędzie" jest po prostu parametrem przekazywanym do widoku, więc należy go obsługiwać i wyświetlać tak, jak komunikat o błędzie. Może być również konieczne ponowne wypełnienie wszystkich innych pól formularza, które zostały przesłane. Mam nadzieję, że jest to jednak punkt we właściwym kierunku.

Powiązane problemy