MaxUploadSizeExceededException nie wywołuje metody obsługi wyjątków na wiosnę
Używam Spring 3.2.0. Wedługto odpowiedź, mam tę samą metodę w moim adnotowanym kontrolerze, który implementujeHandlerExceptionResolver
interfejs, taki jak,
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");
}
a konfiguracja Spring zawiera,
<bean id="filterMultipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize">
<value>10000</value>
</property>
</bean>
Kiedy rozmiar pliku przekracza, należy wywołać poprzednią metodę i automatycznie obsłużyć wyjątek, ale w ogóle się nie zdarza. MetodaresolveException()
nigdy nie jest wywoływany, nawet jeśli wystąpi wyjątek. Jak radzić sobie z tym wyjątkiem? Czy czegoś mi brakuje?
To samo jest również określonetutaj. Nie wiem, dlaczego nie działa w moim przypadku.
Próbowałemnastępujące podejście z@ControllerAdvice
ale to też nie zadziałało.
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);
}
}
Próbowałem też umieścić gadatliwy -Exception
.
@ExceptionHandler(value={Exception.class})
MetodaResponseEntity()
nigdy nie jest wywoływany.
Ogólnie, jeśli to możliwe, chcę obsługiwać ten wyjątek na podstawie kontrolera (poziom kontrolera). Dla tego@ExceptionHandler
Metoda z adnotacjami powinna być aktywna tylko dla tego konkretnego kontrolera, a nie globalnie dla całej aplikacji, ponieważ w mojej aplikacji jest tylko kilka stron internetowych, które obsługują przesyłanie plików. Gdy ten wyjątek jest spowodowany, chcę po prostu wyświetlić przyjazny komunikat o błędzie na bieżącej stronie i nie przekierowywać do strony błędów skonfigurowanej wweb.xml
plik. Jeśli nie jest to nawet możliwe, to wyjątek ten i tak należy traktować bez żadnych niestandardowych wymagań, które właśnie wyraziłem.
Żadne z podejść nie zadziałało dla mnie. Nie mogłem znaleźć nic więcej na temat obsługi tego wyjątku. Czy wymaga to dodatkowej konfiguracji w plikach XML lub w inny sposób?
To, co otrzymuję po zgłoszeniu wyjątku, może być widoczne poniżejsnap shot.