先来看一下一个rest请求到来之后,请求的处理流程图:
看过我之前博文的同学,应该了解了一个请求的大致处理流程,但是之前说的比较简略,这里我稍微详细一些:
1.Rest请求到来之后,被DispatchServlet拿到,进入到doDispatch方法中
2.遍历所有的handlermapping,一直到某个handlerMapping找到了请求路径对应的HandlerExecutionChain,HandlerExecutionChain其中核心就是某个Controller对应的方法
3.根据第2步中找到的HandlerExecutionChain,遍历所有的HandlerAdapter,直到找到能够支持HandlerExecutionChain中的handler的HandlerAdapter为止。其实这里判断的很水,就是看handler是不是HandlerMethod的对象。用的最多的就是RequestMappingHandlerAdapter,下面以RequestMappingHandlerAdapter为例来看看执行流程。
4.调用RequestMappingHandlerAdapter的handleInternal方法,这个方法会返回ModelAndView。具体调用流程如下:
4.1handleInternal调用invokeHandlerMethod(request, response, handlerMethod),invokeHandlerMethod也是RequestMappingH