天天看點

ResponseBody淺析寫代碼中遇到的一個小問題,記錄一下

寫代碼中遇到的一個小問題,記錄一下

@Controller層@RequestMapping後會直接傳回ModelAndView對象,而對于Ajax請求,有些時候隻需要傳回String字元串或者一個Object對象,此時@ResponseBody這個注解通常使用在控制層(controller)的方法上,其作用是将方法的傳回值以特定的格式寫入到response的body區域,進而将資料傳回給用戶端。當方法上面沒有寫ResponseBody,底層會将方法的傳回值封裝為ModelAndView對象。

假如是字元串則直接将字元串寫到用戶端,假如是一個對象,此時會将對象轉化為json串然後寫到用戶端。這裡需要注意的是,如果傳回對象,按utf-8編碼。如果傳回String,預設按iso8859-1編碼,頁面可能出現亂碼。是以在注解中我們可以手動修改編碼格式,例如@RequestMapping(value="/cat/query",produces=“text/html;charset=utf-8”),前面是請求的路徑,後面是編碼格式。

那麼,控制層方法的傳回值是如何轉化為json格式的字元串的呢?其實是通過HttpMessageConverter中的方法實作的,因為它是一個接口,是以由其實作類完成轉換。如果是bean對象,會調用對象的getXXX()方法擷取屬性值并且以鍵值對的形式進行封裝,進而轉化為json串。如果是map集合,采用get(key)方式擷取value值,然後進行封裝。