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

bkj*_*vbx 7 spring spring-mvc

NoSuchRequestHandlingMethodException被废弃在春季4.3,支持的注解驱动的处理方法.这是什么意思?该例外仍列在文档中,未提及其已弃用的状态.如果我理解正确,当没有给定请求的请求映射器时,抛出此异常.它似乎受到处理DefaultExceptionHandlerResolver,在这里,和相关的方法已经被废弃为好.

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

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

Pie*_*rre 1

NoSuchRequestHandlingMethodException 异常是 Spring 中已弃用的多操作包的一部分: https ://docs.spring.io/spring-framework/docs/2.5.x/javadoc-api/org/springframework/web/servlet/mvc/多操作/类使用/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);
  }
}
Run Code Online (Sandbox Code Playgroud)

但是最新的调度程序(非多操作)永远不会抛出这样的异常,因此您可以简单地摆脱 NoSuchRequestHandlingMethodException 并处理 NoHandlerFoundException (默认情况下不会抛出,但您可以配置 spring 调度程序来抛出它如果您确实需要,因为默认情况下调度程序已经返回 404)。