JAVA EE那些事儿Java学习笔记

RequestMappingHandlerAdapter消息转换

2016-11-24  本文已影响251人  刘阳0292

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方法完成返回值处理过程。

消息转换工作交由Spring MVC执行,开发者只要通过一些xml配置、注解,就可以实现想要的消息数据类型,大大减少了开发者的工作。但任何技术都不会是完美的,把消息转换工作交给Spring MVC,我们就要知道它是怎么做的、为什么这么做,这样用的过程中遇到了坑,我们也就有办法解决。
上一篇下一篇

猜你喜欢

热点阅读