java - Spring 3 - 为 NoSuchRequestHandlingMethodException 创建 ExceptionHandler

标签 java spring exception-handling spring-mvc

使用 Spring 3,我喜欢使用 ExceptionHandler 注释创建一个异常处理程序,该注释将处理 "no page found (404)" 请求。我正在使用以下代码来执行此操作。但是当我指向一个不存在的 URL 时,就会调用 Spring 定义的默认异常处理程序。

可能是我正在处理 NoSuchRequestHandlingMethodException 异常。如果是,那我应该注册什么异常?

请你看看下面的代码,看看我做错了什么?

注意:如果我将 @ExceptionHandler 中的异常更改为 NullPointerException 并创建一个 RequestMapping 来抛出空指针,这将起作用。

    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.bind.annotation.RequestMapping;

    import org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException;

    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.springframework.web.servlet.ModelAndView;

    @Controller
    public class GeneralHandler {
      private final Log logger = LogFactory.getLog(getClass());

      @ExceptionHandler(NoSuchRequestHandlingMethodException.class)
      public ModelAndView handleException (NoSuchRequestHandlingMethodException ex) {
        ModelAndView mav = new ModelAndView();
        logger.error("Exception found: " + ex);
        return mav;
      }
    }

最佳答案

当同一类上的 @RequestMapping 方法引发异常时,将调用

@ExceptionHandler 注释方法。因此,当您添加抛出 NullPointerException 的映射时,它起作用了,因为映射的方法和异常处理程序在同一个类中。

当没有找到映射时,Spring 无法将 NoSuchRequestHandlingMethodException 与您的 @ExceptionHandler 相关联,因为它没有将请求与处理程序方法。这在文档中没有明确提及,但这是我观察到的行为。

如果你想特别处理这个异常,你将不得不使用更通用的 HandlerExceptionResolver approach ,而不是更专业的 @ExceptionHandler 技术。

关于java - Spring 3 - 为 NoSuchRequestHandlingMethodException 创建 ExceptionHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3230358/

相关文章:

spring - 无法更改 Spring 安全 SAML SSO 中的默认 "reply Url"(断言消费者服务位置)

java - 如何从 Spring Controller 重定向?

exception - 谁发明了throw/try/catch [/finally]类型的错误处理?

exception - Powershell导出不起作用

java - 在不缓冲整个事情的情况下记录 OkHttp 响应主体大小

java - 将ant项目更改为maven

java - hibernate中的save方法没有立即插入

java - 无法回滚,连接已关闭

java - CountDownLatch 中断异常

java - 从列表中读取信息并放入 map 中