当调用不存在的端点而不是返回404时,Spring 5 HandlerInterceptor会引发ClassCastException

时间:2018-08-27 20:54:48

标签: java spring spring-boot

我目前正在将Spring Boot应用程序从Spring Boot 1.x迁移到Spring Boot2。我遇到以下HandlerInterceptor问题:

new HandlerInterceptor() {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        // ... do something
        log.info("Handler is: {}", handlerMethod);
        return true;
    }
}

此处理程序可对现有的REST端点按预期工作。但是,无论何时调用不存在的REST端点,都将返回500而不是预期的404。响应包含以下消息:

org.springframework.web.servlet.resource.ResourceHttpRequestHandler cannot be cast to org.springframework.web.method.HandlerMethod

Spring 4使用了完全相同的拦截器(用HandlerInterceptorAdapter实现),因此我假设Spring 5在调用处理程序的方式上有所改变。

我还创建了一个小项目来演示GitHub上的这种行为。

所以我的问题是:在哪里可以找到有关Spring如何调用此拦截器以及handler方法中preHandle参数的确切处理内容的更多信息? / p>

0 个答案:

没有答案