DispatherServlet

Servlet有以下特点:

  1. 请求/响应式(Request/Response)。
  2. 屏蔽网络通讯的细节 。
  3. 具有完整的生命周期。

关于DispatcherServlet,在之前的文章中说明的很清楚,在此不再赘述。

Spring Web Mvc Rest处理流程

相比于Spring Web Mvc的处理流程,Rest处理的过程更复杂一点。
在这里插入图片描述

  1. 客户端发送REST请求会被DispatcherServlet拦截。
  2. DispatcherServlet会寻找@RequestMapping所标注的处理方法HandlerMethod,这个处理方法会被放到RequestMappingHadlerMapping里面进行管理。
  3. DispatcherServlet会根据HandlerMethod寻找到RequestMappingHandlerAdpter,然后这个类(RequestMappingHandlerAdapter)会将HandlerMethod转换为InvocableHandlerMethod(对象转换)。
  4. 接下来就是处理请求,HandlerMethodArgumentResolver会将这个请求解析成方法参数,然后放到Controller进行执行。
  5. Controller处理完成后,会将结果返回到InvocableHandlerMethod中。然后被HandlerMethodReturnValueHandler进行处理(对返回值进行第二次加工,处理成为Http消息)。

这个流程里需要重点关注一下HandlerMethodArgumentResolverHandlerMethodReturnValueHandler这两个类。

Spring Web Mvc Rest 内容协商处理流程

在这里插入图片描述

  1. 当请求发送过来的时候(假设请求头是HTTP Accept: application/json的时候),还是前端总控制器DispatcherServlet进行拦截。
  2. DispatcherServlet会找到@ReqeustBody对应的RequestResponseBodyMethodProcessor这个部分,这个部分会去解析请求头里面的MediaType(MediaType : application/json)。这个解析用到了ContentNegotiationManager,也就是内容协商的管理器会进行MediaType的处理。
  3. 处理完后,回去解析HandlerMethod的入参(也就是上一张图的6-7步骤:处理请求、解析方法参数)。解析完入参后,会执行Controller里面的内容,然后会将内容返回到RequestResponseBodyMethodProcessor中。
  4. 匹配HttpMessageConverter进行处理(匹配到MappingJackson2HttpMessageConverter,会发现他的一个处理结果),将结果序列化返回到客户端。

这个过程需要主要关注请求MediaType的解析过程。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐