{4.3}已弃用NoSuchRequestHandlingMethodException
,有利于annotation-driven handler methods。这是什么意思?该例外仍列在documentation中,未提及其已弃用的状态。如果我理解正确,当没有给定请求的请求映射器时,抛出此异常。它似乎由DefaultExceptionHandlerResolver
,here处理,相关方法也已弃用。
如果不推荐使用此方法,我可以假设Spring不再抛出此异常吗?我怎么能用注释驱动的异常处理替换这个功能?我应该处理哪个例外,如果这个例子被弃用了?
旁注:我还注意到较新的NoHandlerFoundException
,here。这是替代品吗?如果是这样,为什么?它似乎做了同样的事情。为什么与其他HTTP状态代码相关的异常不被弃用?这一切都没有多大意义。
答案 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)。