Какие опции мне нужно поймать и обрабатывать 404 без использования web.xml
. Это, как я определяю мой Servlet:Spring 3.2 servlet 3.0 Конфигурация Java (без web.xml), как создать пользовательский обработчик 404
@Order(1)
public class MyWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
// 10MB
private static final int MAX_UPLOAD_SIZE_IN_MB = 10 * 1024 * 1024;
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { RootConfiguration.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { WebConfiguration.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
@Override
protected Filter[] getServletFilters() {
return new Filter[] { new SiteMeshFilter() };
}
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
MultipartConfigElement multipartConfigElement = new MultipartConfigElement("/tmp", MAX_UPLOAD_SIZE_IN_MB, MAX_UPLOAD_SIZE_IN_MB * 2,
MAX_UPLOAD_SIZE_IN_MB/2);
registration.setMultipartConfig(multipartConfigElement);
}
}
Мое приложение все настроено в Java коде, @ControllerAdvice
отлично работает со всеми другими исключениями, как:
BindException.class, MethodArgumentNotValidException.class, MissingServletRequestParameterException.class,
MissingServletRequestPartException.class, HttpMessageNotReadableException.class, TypeMismatchException.class
однако
@ControllerAdvice
public class SomeClass {
...
@ExceptionHandler(value = { ResourceNotFoundException.class, NoSuchRequestHandlingMethodException.class })
public ModelAndView handle404() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("/errors/404");
modelAndView.addObject("exception", "404 NOT FOUND!");
return modelAndView;
}
...
}
делает НЕ catch 404 Я также пробовал HttpStatus ... без везения
, когда я звоню/someUrlThatDoesNotExist:
[DEBUG] 2014-01-24 10:03:16,639 org.springframework.security.web.FilterChainProxy doFilter - /someUrlThatDoesNotExist reached end of additional filter chain; proceeding with original chain
[DEBUG] 2014-01-24 10:03:16,640 org.springframework.web.servlet.DispatcherServlet doService - DispatcherServlet with name 'dispatcher' processing GET request for [/someUrlThatDoesNotExist]
[DEBUG] 2014-01-24 10:03:16,641 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping getHandlerInternal - Looking up handler method for path /someUrlThatDoesNotExist
[DEBUG] 2014-01-24 10:03:16,662 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping getHandlerInternal - Did not find handler method for [/someUrlThatDoesNotExist]
[WARN] 2014-01-24 10:03:16,663 org.springframework.web.servlet.PageNotFound noHandlerFound - No mapping found for HTTP request with URI [/someUrlThatDoesNotExist] in DispatcherServlet with name 'dispatcher'
[DEBUG] 2014-01-24 10:03:16,665 org.springframework.web.servlet.DispatcherServlet processRequest - Successfully completed request
, но когда я пытаюсь осмотреть ниже точки отреза с помощью АОП:
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.handleHttpRequestMethodNotSupported(..)
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver.handleNoSuchRequestHandlingMethod(..)
они никогда не поймают ..
У вас есть пример, как это сделать с AbstractAnnotationConfigDispatcherServletInitializer? –
@marcin У меня нет доступа к коду прямо сейчас, но этот класс должен иметь метод configureDispatcherServlet(), который вы можете переопределить для этого. –
Sotirios Delimanolis Я думаю, что setThrowExceptionIfNoHandlerFound доступен только весной 4.0, а не 3.2.6 dispatcherServlet –