Я использую 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. Это ответ при загрузке файла, который превышает размер. Спасибо.