2017-03-08 4 views
0

Ich versuche eine sehr einfache Sache - die MaxUploadSizeExceededException Fehler im Zusammenhang mit Datei-Uploads zu fangen.@ExceptionHandler Annotation im Controller fängt nicht MaxUploadSizeExceededException

Hier ist das entsprechende Bit in meiner feder servlet.xml:

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

Und hier ist die @ExceptionHandler Methode in dem Controller, der auch das Zeug Datei-Upload

@ExceptionHandler(MaxUploadSizeExceededException.class) 
public String handleException(MaxUploadSizeExceededException e, RedirectAttributes redirectAttributes) { 
    redirectAttributes.addFlashAttribute("uploadErrorMessage", e.getCause().getMessage()); 
    return "redirect:/page"; 
} 

Datei-Upload-Griffe funktioniert gut. Wenn ich jedoch mit einer Datei teste, die die Größenbeschränkung überschreitet, wird der Fehler ausgegeben, und die Methode für ExceptionHanler wird nie aufgerufen.

Jede Hilfe oder Hinweise auf was sonst zu suchen/an würde sehr geschätzt werden.

Antwort

0

Können Sie versuchen, den ExceptionHandler zu ändern, um nach LimitExceededException und MultiPartException anstelle der Unterausnahmen zu suchen?

+0

Ich habe die beiden versucht, aber es funktioniert nicht, es scheint mir, dass ExceptionHandler in den Controllern nur Ausnahme in diesem Controller abgefangen zu fangen. – user2602584

0

Versuchen Sie, eine separate Klasse mit @ControllerAdvice zu erstellen, die sich dann um eine Ausnahme kümmert, die von allen Controllern kommt.

@ControllerAdvice 
public class ExceptionControllerAdvice { 

    @ExceptionHandler(MaxUploadSizeExceededException.class) 
public String handleException(MaxUploadSizeExceededException e, RedirectAttributes redirectAttributes) { 
    redirectAttributes.addFlashAttribute("uploadErrorMessage", e.getCause().getMessage()); 
    return "redirect:/page"; 
} 
} 

Wenn wir also unsere @ExceptionHandler Anmerkung auf Verfahren in @ControllerAdvice Klasse definieren, wird es auf alle Steuerungen angewendet werden.

Sie müssen Folgendes in Ihrer Datei spring-servlet.xml definieren.

Verwandte Themen