5

Ich habe folgende Situation. Ich habe eine CommonsMultipartResolver-Bean wie folgt konfiguriert.Wie SizeLimitExceededException von CommonsMultipartResolver in Spring WebFlow zu behandeln?

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

Und ich habe ein paar Datei-Upload-Felder in einem Web-Flow-Ansicht Zustand jsp Frühling.

Alles funktioniert gut, wenn die Datei unter dem Limit ist, aber wenn die Datei den Grenzwert von 2MB-s überschreitet, muss ich einen Validierungfehler zum Bindungsergebnis auf meinem Formular hinzufügen.

Mein Problem ist, dass der mehrteilige Datei-Resolver eine org.apache.commons.fileupload.FileUploadBase.SizeL imitExceededException-Ausnahme auslöst, wenn das Dateilimit überschritten wird und ich keine Möglichkeit finde, dies in Spring Web Flow abzufangen und hinzuzufügen mein FieldError zum Formular.

Ich habe versucht, das on-Ausnahme-Attribut des Übergangs-Tags, aber wenn ich es richtig verstehe, funktioniert es nur für Ausnahmen, die in Spring Web Flow geworfen werden.

Ich habe auch versucht, SimpleMappingExceptionResolver im Frühjahr mvc zu verwenden, aber ich möchte nicht auf eine Seite umleiten, ich möchte diese Ausnahme behandeln.

Ich fand auch diese: https://jira.springsource.org/browse/SWF-158

Aber es ist von der Version 1.0 und ich gehe davon aus, dass dies seit oder dass ein besserer Weg gefunden, diese Situationen zu bewältigen wurde aufgenommen wurde.

Irgendwelche Ideen auf, wie man damit umgehen würde sehr geschätzt werden.

Danke.

Antwort

3

In Ihrem SimpleMappingExceptionResolver sollten Sie in der Lage sein, die resolveException-Methode zu überschreiben, bestimmen, dass der Ausnahmetyp abgefangen wird und entsprechend behandelt wird.

Ich habe einige alte Code in unserem Projekt gefunden, die eine Lösung für eine ähnliche Ausnahme scheint;

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

Beachten Sie, dass die „Überprüfung/psv/Zustimmung“ der Fluss ist, wo diese Ausnahme ausgelöst worden wäre, und wo muss sie zurück. Wir haben nur die eine Seite, die einen Datei-Upload hat.

Offensichtlich ist die errorMessage nur ein Parameter in der Ansicht übergeben, so dass behandelt werden muss und wie eine Fehlermeldung angezeigt werden muss. Möglicherweise müssen Sie auch alle anderen gesendeten Formularfelder erneut ausfüllen. Hoffentlich ist dies jedoch ein Punkt in die richtige Richtung.

Verwandte Themen