MaxUploadSizeExceededException не вызывает метод обработки исключений в Spring
Я использую Spring 3.2.0. Согласно сэто ответ, у меня есть тот же метод в моем аннотированном контроллере, который реализуетHandlerExceptionResolver
интерфейс, такой как,
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) {
Map<String, Object> model = new HashMap<String, Object>(0);
if (exception instanceof MaxUploadSizeExceededException) {
model.put("msg", exception.toString());
model.put("status", "-1");
} else {
model.put("msg", "Unexpected error : " + exception.toString());
model.put("status", "-1");
}
return new ModelAndView("admin_side/ProductImage");
}
и конфигурация Spring включает в себя,
<bean id="filterMultipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize">
<value>10000</value>
</property>
</bean>
Когда размер файла превышает, предыдущий метод должен быть вызван, и он должен автоматически обработать исключение, но это не происходит вообще. МетодresolveException()
никогда не вызывается, хотя возникает исключение. Как справиться с этим исключением? Я что-то пропустил?
Тоже самое указаноВот, Я не уверен, почему это не работает в моем случае.
Я попробовалследующий подход с участием@ControllerAdvice
но это тоже не сработало.
package exceptionhandler;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.multipart.MaxUploadSizeExceededException;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
@ControllerAdvice
public final class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = {MaxUploadSizeExceededException.class})
protected ResponseEntity<Object> handleConflict(RuntimeException ex, WebRequest request) {
String bodyOfResponse = "This should be application specific";
return handleExceptionInternal(ex, bodyOfResponse, new HttpHeaders(), HttpStatus.CONFLICT, request);
}
}
Я также попытался поставить подробный -Exception
.
@ExceptionHandler(value={Exception.class})
МетодResponseEntity()
никогда не вызывается в любом случае.
В общем, я хочу обработать это исключение для каждой базы контроллера (уровень контроллера), если это возможно. Для этого один@ExceptionHandler
аннотированный метод должен быть активным только для этого конкретного контроллера, а не глобально для всего приложения, поскольку в моем приложении есть только несколько веб-страниц, которые обрабатывают загрузку файлов. Когда это исключение вызвано, я просто хочу показать удобное сообщение об ошибке на текущей странице, а не перенаправлять на страницу ошибки, настроенную вweb.xml
файл. Если это даже невозможно, то это исключение должно быть обработано в любом случае без каких-либо специальных требований, которые я только что высказал.
Ни один из подходов не работал для меня. Больше ничего об обработке этого исключения я не смог найти. Требуется ли дополнительная настройка где-то в XML-файлах или нет?
То, что я получаю после исключения, можно увидеть в следующеммгновенный снимок.