码迷,mamicode.com
首页 > 其他好文 > 详细

@ResponseBody注解的作用

时间:2019-08-20 12:22:13      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:map   processor   nal   单点   image   ESS   直接   roc   value   

@ResponseBody的作用就是将返回的对象通过MessageConverter处理之后,写入response的outputStream中返回。大致流程如下

 

1.在DispatcherServlet中调用doDispatch方法,该方法中有如下代码。这里的ha为RequestMappingHandlerAdapter,这个对象怎么来的,简单点说就是通过request的请求路径匹配到执行器链,通过执行器链中的处理器匹配到对应的适配器,暂时不做深入讨论。

  技术图片

 

 2.handle方法会走到RequestMappingHandlerAdapter的handleInternal中

技术图片

3.调用invokeHandlerMethod方法

技术图片

4.查看invokeAndHandle方法,这里就到了本文的重点了

 技术图片

5.查看handleReturnValue

技术图片

6.查看selectHandler

技术图片

7.这里遍历预置的处理器是否支持返回值的类型。这里的returnValueHanlers比较多,有15个。对应@ResponseBody注解的为RequestResponseBodyMethodProcessor。直接看该对象的supportsReturnType方法。

技术图片

 

 8.匹配到RequestResponseBodyMethodProcessor之后就执行该第5步中该对象的handleReturnValue

技术图片

到此,@ResponseBody注解的作用就讲完了。

 

 

顺带一提,配置了视图解析器之后,通常情况下为ViewNameMethodReturnValueHandler这个类来处理视图。

这里是15个returnValueHandler的截图

技术图片

 

总结:简单的讲,@ResponseBody注解就是为了RequestResponseBodyMethodProcessor处理返回值提供标识。

如有不对之处望指教。

 

@ResponseBody注解的作用

标签:map   processor   nal   单点   image   ESS   直接   roc   value   

原文地址:https://www.cnblogs.com/guyaoblog/p/11382057.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!