HandlerInterceptor 在404 - NOT FOUND的情况为什么会执行两次?

自定义了一个拦截器

public class RouteHandlerInterceptor extends HandlerInterceptorAdapter {

    protected Logger logger = LoggerFactory.getLogger(BaseController.class);

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // PJAX
        if (request.getHeader("X-PJAX") != null) {
            return true;
        }
        return false;
    }

RequestMapping没有对应的映射的时候,一次Get,这个拦截器为啥么会走两次,关键是走第二次的时候request.getHeader("X-PJAX")的数据没有了?
有对应映射的时候,就只会走一次。
而且第一次是Pjax请求,返回的true 第二次Pjax请求就没有了,走的是false ? Why?

阅读 4.2k
2 个回答
// 找不到对应的HandlerMapping / 静态资源
if (handler instanceof DefaultServletHttpRequestHandler) {
    return true;
}

没找到原因,只是加了一个判断,解决当前问题。
但是!在debug模式会一直无线循环下去,生产模式就正常,一脸懵逼、
希望有人给解释一下。。。

会走两次肯定是有两个请求被拦截到了呀
正常做的情况下静态资源请求是可以不用走服务器的。
为什么要用拦截器去判断,你在springmvc框架源码里dispatherservlet 945行打个断点看一下。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题