2015-09-30 81 views
10

我使用Spring Boot v1.2.5創建REST應用程序。在上傳圖片時,我檢查了最大文件大小,它提供了以下屬性:如何處理最大文件大小Spring Boot中的異常?

multipart.maxFileSize= 128KB 

in application.properties。該工具由Spring Boot自己提供。現在檢查工作正常。問題是,我如何處理異常並向用戶返回他可以理解的消息?

更新1 ----------

我我的控制器,在那裏我打算處理MultipartException,使用@ExceptionHandler內寫了一個方法。它似乎沒有工作。

這是我的代碼:

@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; 
} 

更新2 ----------

@luboskrnac指出了這一點後,我設法拿出一個解決方案。我們可以在這裏使用ResponseEntityExceptionHandler來處理這個特殊情況。我相信,我們也可以使用DefaultHandlerExceptionResolver,但ResponseEntityExceptionHandler將允許我們返回ResponseEntity,而不是前者,其方法將返回ModelAndView。我還沒有雖然嘗試過。

這是我用來處理MultipartException最終代碼:

@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; 
} 
} 

我使用揚鞭開發/記錄REST的API。這是上傳超過大小的文件時的響應。 enter image description here 謝謝。

回答

4

Spring Boot docs says

您還可以使用常規的Spring MVC的功能,比如@ExceptionHandler 方法和@ControllerAdviceErrorController然後將拾取 任何未處理的異常。

至於MultipartException似乎hapen @Controller/@ExceptionHandler/@ControllerAdvice功能開始發揮作用之前,你應該使用ErrorController來處理它。

順便說一句,我發現這個thread in the meantime。你可能想看看。

+0

我試過這樣做。我嘗試使用ExceptionHandler在我的控制器中本地處理異常,而不是使用ControllerAdvice的全局包裝器,如您共享的文檔中所述。我試圖在方法中處理MultipartException。它似乎沒有工作。 @luboskrnac請檢查更新1. –

+0

我錯了,之前糾正了我的答案。你想使用ErrorController。 – luboskrnac

+0

感謝您指出。我用我使用的最終解決方案更新了我的文章。 –