1. 程式人生 > >SpringMVC中註解@RequestBody和@ResponseBody的使用區別

SpringMVC中註解@RequestBody和@ResponseBody的使用區別

mes 支持 json轉換 ima and web app 源代碼 實現類

首先上源碼

技術分享圖片

在面試時經常會問到我們如何使用SpringMVC將Http請求轉換為java對象,或者又是問如何將結果轉換為java的呢?

SpringMVC在接收到請求之後HandlerMapping像是一個路由找到處理器和攔截器,而處理器對控制器進行包裝就是對控制器進行了功能的增強,而處理器如何能是json和java對象的轉換呢?這就要了解

這個時候就會使用到一個類他的作用是HttpMessageConverter<T>,這個的作用是將媒體類型對應的請求讀入,控制器返回轉換為對應媒體類型

,第二是webDataBinder是提供數據綁定和驗證,將結果傳給HttpMessageConverter

//HttpMessageConverter的源代碼可以分為

是否可以讀入媒體類型,是否可以寫入媒體類型,

獲取媒體類型,讀入請求體,將其轉換為媒體類型

控制器返回內容

在SpringMVC中關於HttpMessageConverter<T>實現的類有很多,SpringMVC會將實現HttpMessageConverter<T>的實現類組織成一條鏈存放起來,,而支持JSON轉換的是

MappingJackson2HttpMessageConverter<T>springMVC會自動將它放入到MVC的鏈中,在這裏我們不需要進行任何編碼

@RequestBody的執行流程是,在HttpMessageConver中會有5個方法,在加上註解之後其中的canRead會去判斷是否能讀,如果可以就會執行MappingJackson2HttpMessageConverter,跟著會去執行read方法

,將請求體轉換為java對象,這就是#RequestBody的原理

@ResponseBody的執行流程是,當你標註之後就會記錄相應體為JSON類型,當控制器返回後走到HttpMessageConverter鏈的時候通過canWriter判斷是否能進行寫,在經過MappingJackson2HttpConverter的實例調用writer方法將控制器返回JSON,之後的流程會得到一個空參數就不在執行了

SpringMVC中註解@RequestBody和@ResponseBody的使用區別