2015-09-30 2 views
10

Я использую Spring Boot v1.2.5 для создания приложения REST. При загрузке изображений у меня есть проверка на максимальный размер файла, которому предоставляется свойство:Как обрабатывать максимальный размер файла Исключение в Spring Boot?

multipart.maxFileSize= 128KB 

in application.properties. Это средство предоставляется самой Spring Boot. Теперь проверка работает правильно. Вопрос в том, как мне обрабатывать исключение и возвращать пользователю сообщение, которое он может понять?

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

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

После @luboskrnac указал на это, мне удалось придумать решение. Мы можем использовать здесь ResponseEntityExceptionHandler, чтобы справиться с этим конкретным случаем. Я считаю, что мы могли бы также использовать DefaultHandlerExceptionResolver, но ResponseEntityExceptionHandler позволит нам вернуть ResponseEntity, в отличие от первого, методы которого возвратят ModelAndView. I не сделали попробовал.

Это последний код, который я использую для обработки 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; 
} 
} 

Я использую Swagger для разработки/документирования REST Apis. Это ответ при загрузке файла, который превышает размер. enter image description here Спасибо.

ответ

4

Spring Boot docs says:

Вы также можете использовать обычные функции Spring MVC как @ExceptionHandler методы и @ControllerAdvice. Затем ErrorController поднимет любые необработанные исключения.

Как MultipartException кажется, hapen до того @Controller/@ExceptionHandler/@ControllerAdvice функции входит в игру, вы должны использовать ErrorController, чтобы справиться с этим.

BTW, я нашел это thread in the meantime. вы можете взглянуть.

+0

Я пробовал это сделать. Я попытался обработать исключение локально внутри моего контроллера, используя ExceptionHandler, а не глобальную оболочку с помощью ControllerAdvice, как указано в документах, которыми вы делились. Я пытаюсь обрабатывать MultipartException в методе. Кажется, это не работает. @luboskrnac Пожалуйста, проверьте обновление 1. –

+0

Я ошибся, прежде чем исправил свой ответ. Вы хотите использовать ErrorController. – luboskrnac

+0

Спасибо, что указали это. Я обновил свой пост окончательным решением, которое я использую. –

Смежные вопросы