RequestMappingHandlerAdapter消息转换机制
- 前言:SpringMVC通过前端控制器DispatcherServlet的doDispach()方法进行请求处理。其中,我们通过HandlerAdapter的handle方法将请求交给合适的handler处理,此外,执行一些参数解析、返回值处理工作。
</br>- 步骤1:AbstractHandlerMethodAdapter的handle方法将参数解析、handler调用、返回值处理交由其子类RequestMappingHandlerAdapter的invokeHandleMethod方法,后者调用ServletInvocableHandlerMethod的invokeAndHandle方法
- 步骤2:ServletInvocableHandlerMethod继承于InvocableHandlerMethod,ServletInvocableHandlerMethod的invokeAndHandle方法,(2.1)调用其继承于父类的invokeForRequest方法进行参数解析、handler处理器调用;(2.2)通过其成员变量returnValueHandlers方便调用HandlerMethodReturnValueHandler接口handleReturnValue抽象方法的实现进行返回值处理。
- 步骤2.1:InvocableHandlerMethod类的invokeForRequest方法调用其本类的getMethodArgumentValues方法进行参数解析,利用成员变量argumentResolvers调用方法参数解析器,通过SupportsParameter方法,选择合适的解析器,通过解析器的resolveArgument方法调用readWithMessageConverters方法进行参数解析,解析的参数供处理器方法使用,通过doInvoke方法调用处理器方法。
- 步骤2.2:通过ServletInvocableHandlerMethod类成员变量returnValueHandlers来方便调用返回值处理器,通过HandlerMethodReturnValueHandler接口supportsReturnType方法选择合适的返回值处理器、handleReturnValue方法进行返回值处理。handleReturnValue方法调用WriteWithMessageConverters方法,利用消息转换器的canWrite、Write方法完成返回值处理过程。
网友评论