@ResponseBody注解的作用


@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處理返回值提供標識。

如有不對之處望指教。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM