Подтвердить что ты не робот

Как обрабатывать максимальный размер файла Исключение в Spring Загрузка?

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

multipart.maxFileSize= 128KB

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

Обновление 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 позволит нам вернуть a 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;
}
}

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

4b9b3361

Ответ 1

Spring Загружаемые документы:

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

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

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