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

时间:2017-07-13 09:01:04

标签: spring spring-mvc

{4.3}已弃用NoSuchRequestHandlingMethodException,有利于annotation-driven handler methods。这是什么意思?该例外仍列在documentation中,未提及其已弃用的状态。如果我理解正确,当没有给定请求的请求映射器时,抛出此异常。它似乎由DefaultExceptionHandlerResolverhere处理,相关方法也已弃用。

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

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

1 个答案:

答案 0 :(得分:0)

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

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