Это старый вопрос, поэтому я добавляю его для будущих людей (включая меня в будущем), которые борются за то, чтобы это работало с Spring Boot 2 .
Сначала необходимо настроить приложение Spring (в файле свойств):
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
Если вы используете встроенный Tomcat (и, скорее всего, так оно и есть в стандартной комплектации), важно также настроить Tomcat, чтобы он не отменял запрос с большим телом
server.tomcat.max-swallow-size=-1
или, по крайней мере, установите относительно большой размер
server.tomcat.max-swallow-size=100MB
Если вы не установите maxSwallowSize для Tomcat, вы можете потратить много часов на отладку причины ошибки, но браузер не получит ответа - потому что без этой конфигурации Tomcat отменит запрос, и даже если вы увидите в регистрирует, что приложение обрабатывает ошибку, браузер уже получил отмену запроса от Tomcat и больше не ожидает ответа.
И для обработки MaxUploadSizeExceededException вы можете добавить ControllerAdvice с ExceptionHandler .
Вот краткий пример в Kotlin, который просто устанавливает атрибут flash с ошибкой и перенаправляет на некоторую страницу:
@ControllerAdvice
class FileSizeExceptionAdvice {
@ExceptionHandler(MaxUploadSizeExceededException::class)
fun handleFileSizeException(
e: MaxUploadSizeExceededException,
redirectAttributes: RedirectAttributes
): String {
redirectAttributes.addFlashAttribute("error", "File is too big")
return "redirect:/"
}
}
ПРИМЕЧАНИЕ: если вы хотите обработать MaxUploadSizeExceededException с ExceptionHandler непосредственно в вашем классе контроллера, вы должны настроить следующее свойство:
spring.servlet.multipart.resolve-lazily=true
в противном случае это исключение будет вызвано до того, как запрос будет сопоставлен с контроллером.