【问题标题】:What is the replacement for Spring's deprecated NoSuchRequestHandlingMethodException?Spring 已弃用的 NoSuchRequestHandlingMethodException 的替代品是什么?
【发布时间】:2017-12-17 23:07:24
【问题描述】:

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

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

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

【问题讨论】:

  • NoSuchRequestHandlingMethodException 源于一个事实,即曾经有一个 MultiActionController,因为它已被弃用,也适用于随附的类(如例外)。您的理解也是错误的,它是从MultiActionController 中抛出的,如果找不到方法,它会抛出它。它不是像NoHandlerFoundException 这样的通用异常处理的一部分。
  • @M.Deinum 感谢您的澄清!那么这个异常永远不会被Spring本身抛出?如果我想处理通用 404,我应该处理 NoHandlerFoundException?
  • 它将被 Spring 的特定弃用组件抛出,因此其余部分弃用。
  • @M.Deinum 啊,我明白了,谢谢。因此,如果我没有 MultiActionController 实例(或任何其他多操作类),我可以放心地忽略此异常。并使用NoHandlerFoundException 处理未映射的请求。
  • 没错。并且整个MultiActionController(以及随之而来的对象/方法)的东西已被弃用。

标签: spring spring-mvc


【解决方案1】:

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 语句和/或停止尝试捕获和处理该异常。例如,一些“异常到响应的错误处理程序”示例代码可能看起来像这样,以便在调度程序找不到正确映射时尝试捕获情况:

   @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);
  }
}

但是最新的dispatcher(非multiaction)永远不会抛出这样的异常,所以你可以简单地摆脱NoSuchRequestHandlingMethodException,而是处理NoHandlerFoundException(默认不抛出,但你可以配置spring dispatcher如果你真的需要就扔掉它,因为默认情况下,调度程序已经返回 404)。

【讨论】:

    猜你喜欢
    • 2016-05-25
    • 2019-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多