5

Ho la seguente situazione. Ho un bean CommonsMultipartResolver configurato nel seguente modo.Come gestire SizeLimitExceededException da CommonsMultipartResolver in Spring WebFlow?

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

e ho un paio di campi di upload di file in una primavera Web flusso jsp stato di visualizzazione.

Tutto funziona correttamente se il file è sotto il limite, ma se il file supera il limite di 2 MB-s devo aggiungere un errore di convalida al risultato del bind sul mio modulo.

Il mio problema è che il resolver file multipart genera un'eccezione org.apache.commons.fileupload.FileUploadBase.SizeL imitExceededException quando il limite di file viene superato e non riesco a trovare un modo per catturarlo in Spring Web Flow e aggiungere il mio FieldError al modulo.

Ho provato a utilizzare l'attributo on-exception del tag di transizione, ma se ho capito correttamente funziona solo per le eccezioni generate all'interno di Spring Web Flow.

Ho anche provato a utilizzare SimpleMappingExceptionResolver in spring mvc, ma non voglio reindirizzare a una pagina, voglio gestire questa eccezione.

ho trovato anche questo: https://jira.springsource.org/browse/SWF-158

Ma è a partire dalla versione 1.0 e sto supponendo che questa è stata incorporata in quanto o che un modo migliore è stato trovato per gestire queste situazioni.

Tutte le idee su come gestirlo saranno molto apprezzate.

Grazie.

risposta

3

Nel proprio SimpleMappingExceptionResolver si dovrebbe essere in grado di ignorare il metodo resolveException, determinare il tipo di eccezione che viene rilevato e gestirlo in modo appropriato.

Ho trovato qualche vecchio codice nel nostro progetto che sembra essere una soluzione a un'eccezione simile;

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

Nota che la "verifica/PSV/consenso" è il flusso in cui questa eccezione sarebbe stato gettato da e dove deve tornare. Abbiamo solo una pagina con un caricamento di file.

Ovviamente l'errorMessage è solo un parametro passato nella vista, quindi sarà necessario gestirlo e visualizzarlo come un messaggio di errore. Potrebbe inoltre essere necessario ri-compilare qualsiasi altro campo modulo inviato. Spero che questo sia un punto nella giusta direzione.

Problemi correlati