handleNoSuchRequestHandlingMethod переопределение не работает - PullRequest
0 голосов
/ 08 марта 2012
@Controller
public class CentralizedExceptionController extends DefaultHandlerExceptionResolver {

    @Override
    protected ModelAndView handleNoSuchRequestHandlingMethod(NoSuchRequestHandlingMethodException ex, HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("working?!");
        return new ModelAndView();
    }

У меня есть это в моем коде, но в случае 404 его никогда не вызывали. (У меня нет страницы ошибки, определенной в моем web.xml, и я не хочу)

Ответы [ 4 ]

0 голосов
/ 25 апреля 2014

Пожалуйста, проверьте. Ваше имя класса контроллера должно не быть Controller.java.

0 голосов
/ 09 марта 2012
0 голосов
/ 02 апреля 2013

Если ваш сервлет-диспетчер Spring настроен на обработку всех / большинства URL-адресов, вы, вероятно, получаете сообщение об ошибке 404 вместе с этим сообщением журнала DispatcherServlet из консоли:

No mapping found for HTTP request with URI [xxx]

Это указывает на то, что Spring DispatcherServlet обрабатываетзапрос, но не имеет соответствующего @RequestMapping для отправки в.

Простым решением было бы ограничить запросы, обрабатываемые сервлетом-диспетчером, путем перенастройки web.xml servlet-mapping > url-pattern только URL-адресами, указанными в @RequestMappings вашего приложения.Однако это НЕ очень практично (поэтому не делайте этого).

Один из способов преодолеть это - создать @RequestMapping, который обрабатывает все «необработанные» отображения запросов - какое-то резервное отображение запросов.

@RequestMapping("**")
@ResponseBody
public String fallbackRequestMapping() {
    return "do something useful...";
}

Обратите внимание, что этот ответ аналогичен подходу к ответу Дэни, но написан с учетом разработки на основе аннотаций.Поэтому полезно разобраться в связанной весенней проблеме .

0 голосов
/ 08 марта 2012

Вам необходимо использовать @ExceptionHandler аннотацию к вашему методу:

@ExceptionHandler(NoSuchRequestHandlingMethodException.class)
public ModelAndView handleNoSuchRequestHandlingMethod(NoSuchRequestHandlingMethodException ex, HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    ...
}
...