2015-12-09 3 views
5

Как я установить максимальный предел загрузки файла, я получаюMultipart Загрузка файла: Размер превышать исключение в весенних загрузках возвращаемого сообщения об ошибке в формате JSON

org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field file exceeds its maximum permitted size of 2097152 bytes 

ошибку при загрузке file.It дает ошибку 500 на мой апи, Я должен обработать эту ошибку и вернуть ответ в формате JSON, а не ошибку, как указано в ErrorController.

Я хочу поймать это исключение и дать ответ JSON не ErrorPage.

@RequestMapping(value="/save",method=RequestMethod.POST) 
    public ResponseDTO<String> save(@ModelAttribute @Valid FileUploadSingleDTO fileUploadSingleDTO,BindingResult bindingResult)throws MaxUploadSizeExceededException 
    { 
     ResponseDTO<String> result=documentDetailsService.saveDocumentSyn(fileUploadSingleDTO, bindingResult); 

     return result; 

    } 

DTO, который принимает документ следующим

public class FileUploadSingleDTO { 
@NotNull 
    private Integer documentName; 

    private Integer documentVersion; 

    @NotNull 
    private MultipartFile file; 
} 
+0

Я хочу, чтобы поймать, что размер файла превышает exception..after большой файл uploaded.My код отлично работает, когда я загружаю размер файла меньше, чем MaxUploadSize – MasterCode

+0

Что ваш код для обработки загрузки файлов? –

+0

Вы также можете использовать 'MultipartHttpServletRequest' вместо' HttpServletRequest'. Затем, чтобы получить доступ к загружаемому файлу (-ам), вам нужно использовать 'MultipartFile file = request.getFile (request.getFileNames(). Next());', который вам нужно обернуть с помощью 'IOException'. Это держит ваш DTO тощий. –

ответ

12

Как я знаю вас может обрабатывать исключение многостраничного файла, используя это.

@ControllerAdvice 
public class MyErrorController extends ResponseEntityExceptionHandler { 

Logger logger = org.slf4j.LoggerFactory.getLogger(getClass()); 

@ExceptionHandler(MultipartException.class) 
@ResponseBody 
String handleFileException(HttpServletRequest request, Throwable ex) { 
    //return your json insted this string. 
    return "File upload error"; 
    } 
} 
+0

После копания в исходный код, я обнаружил, что CommonsMultipartResolver обрабатывает исключение FileSizeLimitExceededException и бросает бросок нового MultipartException («Невозможно разобрать многосердечный запрос сервлета», например); здесь ex - это FileSizeLimitExceededException, которое фактически выбрано классом commons.fileupload.FileuploadBase. Таким образом, вы не можете обрабатывать FileSizeLimitExceededException. Используйте общие ошибки загрузки файлов реализации с помощью MultipartException. –

+0

Позвольте мне проверить, работает ли это – MasterCode

+0

@ RampelliSrinivas, это будет очень полезно, если вы можете объяснить комментарий, который вы написали выше. – quintin

2

Добавить специальный обработчик исключений в ваш контроллер:

@ExceptionHandler(FileSizeLimitExceededException.class) 
public YourReturnType uploadedAFileTooLarge(FileSizeLimitExceededException e) { 
    /*...*/ 
} 

(Если это не работает, вы должны включить обработку исключений ваша конфигурация. Обычно пружина делает это по умолчанию.)