Когда я пытаюсь загрузить файл, я получаю исключение FileSizeLimitExceededException
и не могу обработать его в своем классе контроллера.
Мой обработчик исключений выглядит следующим образом:
@ExceptionHandler(Exception.class)
public ModelAndView handleFileSizeLimitExceeded(Exception exc) {
System.out.println("In Exception handler");
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
User user = userService.findUserByEmail(auth.getName());
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("imageUploadMessage", "File too big");
modelAndView.addObject("currentUser", user);
modelAndView.setViewName("profile");
return modelAndView;
}
Я видел несколько похожих вопросов на Stackoverflow
об этой проблеме, но многие из них не имеют принятого ответа, а предложенные там ответы также не могли решить мою проблему.
Например, я пробовал FileSizeLimitExceededException
, MultipartException
и MaxUploadSizeExceededException
в своем обработчике исключений, но контроллер вообще никогда не срабатывал.
Следуя решению, предложенному здесь, я попробовал следующие настройки в своем propertis
файле:
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
server.tomcat.max-swallow-size=100MB
spring.servlet.multipart.resolve-lazily=true
Но тоже без успеха.
Есть ли решение этой проблемы?
А пока я хочу вернуть ModelAndView
в качестве оператора return.
Я надеюсь, что кто-то уже нашел реальное решение этой проблемы :).
Обновление 1: Вот скриншот исключения:
Кроме того, было бы хорошо, если бы вы предоставили логи и фактический ответ
@AndreiKovrov Файл, который я пытаюсь загрузить, представляет собой изображение размером 16 МБ. Я обновил свой вопрос со скриншотом исключения.
Определите другой класс для глобальной обработки MaxUploadSizeExceededException. Код ниже запускается только при возникновении исключения MaxUploadSizeExceededException.
@ControllerAdvice
public class GlobalControllerAdvice {
@ExceptionHandler(MaxUploadSizeExceededException.class)
public ModelAndView handleFileSizeLimitExceeded(HttpServletRequest req, Exception ex) {
System.out.println("In Exception handler");
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
User user = userService.findUserByEmail(auth.getName());
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("imageUploadMessage", "File too big");
modelAndView.addObject("currentUser", user);
modelAndView.setViewName("profile");
return modelAndView;
}
}
К сожалению, ваш код не работает. Я его как-то поменял и вроде стало лучше. Но единственная разница в том, что я не получаю никаких ошибок в выводе моего затмения. Но он НЕ возвращается на текущую страницу и не показывает сообщение, которое я установил в modelAndView.
привет, я протестировал код с ответом ResponseEntity. Я видел, что точка останова находится в функции. Вы пытались поставить какие-либо точки останова в функции?
Я также запустил функцию при реализации с использованием ControllerAdvice, и если я установил там точку останова, я также это вижу. Ты прав. Но похоже, что возврат "ModelAndView" там не работает должным образом. Меня не перенаправляют на страницу, на которой я был раньше. Когда я реализую это таким образом, я не получаю никаких исключений в своем затмении и не возвращаюсь на предыдущую страницу, а просто вижу страницу «соединение прервано».
Если вы можете вернуть код на текущую страницу, не могли бы вы поделиться своим кодом со мной.
Чтобы решить мою проблему, мне просто нужно было обновить версию Spring
в моем pom.xml
файле.
Какой размер файла вы тестировали? Если он> 100 МБ, я подозреваю, что Tomcat разорвет соединение, и вы не увидите ответа с ModelAndView.