2015-09-30 2 views
10

Ich verwende Spring Boot v1.2.5 zum Erstellen einer REST-Anwendung. Beim Hochladen von Bildern habe ich eine Prüfung auf maximale Dateigröße, die die Eigenschaft zur Verfügung gestellt wird:Wie wird mit der maximalen Dateigröße verfahren? Ausnahme beim Spring Boot?

in application.properties. Diese Einrichtung wird von Spring Boot selbst bereitgestellt. Jetzt funktioniert der Check ordnungsgemäß. Die Frage ist, wie gehe ich mit der Ausnahme und eine Nachricht an den Benutzer zurück, die er verstehen kann?

Update 1 ----------

schrieb ich eine Methode in meinem Controller, wo ich beabsichtige, die MultipartException zu handhaben, @ExceptionHandler verwenden. Es scheint nicht zu funktionieren.

Dies ist mein Code:

@ExceptionHandler(MultipartException.class) 
@ResponseStatus(value = HttpStatus.PAYLOAD_TOO_LARGE) 
public ApplicationErrorDto handleMultipartException(MultipartException exception){ 
    ApplicationErrorDto applicationErrorDto = new ApplicationErrorDto(); 
    applicationErrorDto.setMessage("File size exceeded"); 
    LOGGER.error("File size exceeded",exception); 
    return applicationErrorDto; 
} 

Update 2 ----------

Nach @luboskrnac darauf hingewiesen, ich habe mit einer Lösung kommen verwaltet. Wir können hier ResponseEntityExceptionHandler verwenden, um diesen speziellen Fall zu behandeln. Ich glaube, wir hätten auch DefaultHandlerExceptionResolver verwenden können, aber ResponseEntityExceptionHandler wird uns erlauben, eine ResponseEntity, im Gegensatz zu den ehemaligen, die Methoden, die ModelAndView zurückgeben werden. Ich habe nicht versucht es aber.

Dies ist der letzte Code, den ich die MultipartException behandeln bin mit:

@ControllerAdvice 
public class CustomResponseEntityExceptionHandler extends ResponseEntityExceptionHandler { 

private static final Logger LOGGER = Logger.getLogger(CustomResponseEntityExceptionHandler.class); 

@ExceptionHandler(MultipartException.class) 
@ResponseStatus(value = HttpStatus.PAYLOAD_TOO_LARGE) 
@ResponseBody 
public ApplicationErrorDto handleMultipartException(MultipartException exception){ 
    ApplicationErrorDto applicationErrorDto = new ApplicationErrorDto(); 
    applicationErrorDto.setMessage("File size exceeded"); 
    LOGGER.error("File size exceeded",exception); 
    return applicationErrorDto; 
} 
} 

Ich bin mit Swagger für die Entwicklung/Dokumentation REST Apis. Dies ist die Antwort beim Hochladen einer Datei, die die Größe überschreitet. enter image description here Danke.

Antwort

4

Spring Boot docs says:

Sie können auch reguläre Spring MVC-Features wie @ExceptionHandler Methoden und @ControllerAdvice verwenden. Die ErrorController wird dann alle nicht behandelten Ausnahmen abholen.

Wie MultipartException scheinen zu hapen vor @Controller/@ExceptionHandler/@ControllerAdvice Features ins Spiel kommt, sollten Sie ErrorController es zu handhaben verwenden.

BTW, fand ich diese thread in the meantime. Vielleicht möchten Sie einen Blick darauf werfen.

+0

Ich habe versucht, das zu tun. Ich habe versucht, die Exception lokal in meinem Controller mit ExceptionHandler zu behandeln, anstelle eines globalen Wrappers mit ControllerAdvice, wie in den von Ihnen freigegebenen Dokumenten angegeben. Ich versuche MultipartException in der Methode zu behandeln. Es scheint nicht zu funktionieren. @luboskrnac Bitte überprüfen Sie das Update 1. –

+0

Ich lag falsch, vorher und korrigiert meine Antwort. Sie möchten ErrorController verwenden. – luboskrnac

+0

Danke, dass Sie darauf hingewiesen haben. Ich habe meinen Beitrag mit der endgültigen Lösung aktualisiert, die ich verwende. –

Verwandte Themen