Пользовательская ошибка HTTP 404 — настройка на основе аннотаций Spring 3.2

Можно ли реализовать пользовательскую страницу ошибки HTTP 404 на основе аннотаций с помощью Spring 3.2.1? Я искал способы на различных форумах, но не нашел четкого ответа.

Я также пытался настроить с помощью web.xml, но он не работает, когда я обращаюсь к несопоставленному URL-адресу. Любая помощь, пожалуйста?

Вывод журнала

  7259 [DEBUG] org.springframework.web.servlet.DispatcherServlet  - DispatcherServlet with name 'spring-test' processing GET request for [/spring-test/ss]
  7261 [DEBUG] org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping  - Looking up handler method for path /ss
  7262 [DEBUG] org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping  - Did not find handler method for [/ss]
  7262 [WARN ] org.springframework.web.servlet.PageNotFound  - No mapping found for HTTP request with URI [/spring-test/ss] in DispatcherServlet with name 'spring-test'
  7262 [DEBUG] org.springframework.web.servlet.DispatcherServlet  - Successfully completed request

веб.xml

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app
@Controller
@RequestMapping(value = "/errors")
public class CommonExceptionHandler {

    private static Logger log = Logger.getLogger(CommonExceptionHandler.class.getName());

    @RequestMapping(method = RequestMethod.GET, value = "/{code}")
    public ModelAndView handleException(@PathVariable int code) {

        if (log.isDebugEnabled()) {
            log.debug("ERROR CODE IS: " + code);
        }

        return new ModelAndView("errors/404");
    }

}
0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app
@Controller
@RequestMapping(value = "/errors")
public class CommonExceptionHandler {

    private static Logger log = Logger.getLogger(CommonExceptionHandler.class.getName());

    @RequestMapping(method = RequestMethod.GET, value = "/{code}")
    public ModelAndView handleException(@PathVariable int code) {

        if (log.isDebugEnabled()) {
            log.debug("ERROR CODE IS: " + code);
        }

        return new ModelAndView("errors/404");
    }

}
0.xsd" id="rest" version="3.0" metadata-complete="true"> <!-- The definition of the Spring Container shared by all Servlets and Filters --> <context-param> <param-name>contextClass</param-name> <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value> </context-param> <context-param> <param-name>contextConfigLocation</param-name> <param-value>main.java.net.bornil.config</param-value> </context-param> <!-- Processes application requests --> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextClass</param-name> <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value> </init-param> <init-param> <param-name>contextConfigLocation</param-name> <param-value>main.java.net.bornil.config</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- Creates the Spring Container shared by all Servlets and Filters --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <welcome-file-list> <welcome-file /> </welcome-file-list> <error-page> <error-code>404</error-code> <location>/errors/404</location> </error-page> </web-app>

Контроллер

@Controller
@RequestMapping(value = "/errors")
public class CommonExceptionHandler {

    private static Logger log = Logger.getLogger(CommonExceptionHandler.class.getName());

    @RequestMapping(method = RequestMethod.GET, value = "/{code}")
    public ModelAndView handleException(@PathVariable int code) {

        if (log.isDebugEnabled()) {
            log.debug("ERROR CODE IS: " + code);
        }

        return new ModelAndView("errors/404");
    }

}

person Moon    schedule 26.03.2013    source источник
comment
Если вы напрямую переходите к /{yourContextPath}/errors/404, отображается ли страница с ошибкой?   -  person Luciano    schedule 26.03.2013
comment
@ Лучано, да. он показывает страницу ошибки.   -  person Moon    schedule 27.03.2013
comment
@ Лучано, я нашел причину. Тупо я внес изменения в разные web.xml. Теперь конфигурация на основе xml работает. Любая помощь по настройке на основе аннотаций? Спасибо.   -  person Moon    schedule 27.03.2013
comment
Вы нашли какое-либо решение, используя аннотацию?   -  person coding_idiot    schedule 23.06.2015


Ответы (1)


Я была такая же проблема. У меня есть простое веб-приложение, одна страница, и, проведя утро на форуме Spring (так приятно, что вы не можете искать там «404», потому что это всего 3 символа), и Google это лучшее решение, которое я нашел. Предполагая, что у вас есть index.jsp и 404.jsp, мой @Configuration имеет:

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/").setViewName("index");
    registry.addViewController("/*").setViewName("404");
}
person Andrea Vacondio    schedule 15.05.2013