spring - Spring 已弃用的 NoSuchRequestHandlingMethodException 的替代品是什么?

标签 spring spring-mvc

NoSuchRequestHandlingMethodException在 Spring 4.3 中被弃用,取而代之的是 annotation-driven handler methods .这是什么意思?异常仍然列在 documentation 中,而没有提及其已弃用的状态。如果我理解正确,当给定请求没有请求映射器时会抛出此异常。它似乎由 DefaultExceptionHandlerResolver 处理, here ,并且相关方法也已弃用。

如果不推荐使用此方法,我是否可以假设 Spring 不再抛出此异常?我应该如何用注释驱动的异常处理替换这个功能?如果不推荐使用此异常,我应该处理哪个异常?

旁注:我还注意到一个更新的 NoHandlerFoundException , here .这是替代品吗?如果是这样,为什么?它似乎在做同样的事情。为什么不推荐使用与其他 HTTP 状态代码相关的异常?这一切都没有多大意义。

最佳答案

NoSuchRequestHandlingMethodException 异常是 Spring 中已弃用的 multiaction 包的一部分:
https://docs.spring.io/spring-framework/docs/2.5.x/javadoc-api/org/springframework/web/servlet/mvc/multiaction/class-use/NoSuchRequestHandlingMethodException.html
如果您不使用多操作,则可以安全地摆脱该 catch 语句和/或停止 try catch 和处理该异常。例如,一些“异常到响应错误处理程序”示例代码可能如下所示,以 try catch 调度程序未找到正确映射时的情况:

   @ControllerAdvice
public class RestErrorHandler {

  @ExceptionHandler({FileNotFoundException.class, NoSuchRequestHandlingMethodException.class})
  @ResponseStatus(HttpStatus.NOT_FOUND)
  @ResponseBody
  public ErrorInfo process404(HttpServletRequest req, Exception ex) {
    return handleException(req, HttpStatus.NOT_FOUND, ex);
  }
}
但是最新的调度器(非多操作)永远不会抛出这样的异常,所以你可以简单地摆脱 NoSuchRequestHandlingMethodException ,而是处理 NoHandlerFoundException (默认情况下不会抛出,但你可以配置 spring 调度器来抛出它如果您真的需要,因为默认情况下,调度程序已经返回 404)。

关于spring - Spring 已弃用的 NoSuchRequestHandlingMethodException 的替代品是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45076007/

相关文章:

java - Spring 框架 Neo4jRepository 函数 findById 导致密码错误

Spring 和富客户端(React.js 等),防止重复模板

java - 使用默认模板的 spring mvc 出现 404 错误

java - 在内存中创建文本文件以供下载?

java - Spring + Hibernate 控制台应用程序

java - PathVariable 根本不起作用

java - 嵌入式tomcat与spring集成

spring - spring 3 MVC 应用程序是否有 maven 2 原型(prototype)?

java - spring-core 4.3.8 缺少 EmptyVisitor 类?

spring - 如何使用原始 InputStream 实例化 FSDataInputStream?