通過SpringMVC框架響應JSON數據
1. 通過SpringMVC框架響應JSON數據
在SpringMVC框架(含SpringBoot框架)中,當處理請求的方法之前添加了@ResponseBody后,或在控制器類之前使用的是@RestController,處理請求的方法的返回值將作為響應到客戶端的數據。
當服務器向客戶端響應數據時,SpringMVC框架會使用“轉換器”(Converter)將方法的返回值進行轉換,及處理響應時的響應頭(Response Headers)等內容,針對返回值類型不同,SpringMVC框架還會自動使用不同的轉換器。
當響應數據的類型(處理請求的方法的返回值類型)是String時,會自動使用StringHttpMessageConverter轉換器,該轉換器就會自動將返回的字符串作為數據響應到客戶端,并且,還會設置響應頭,默認情況下,在響應頭中會設置Content-Type屬性,其值是text/html; charset=ISO-8859-1,所以,在SpringMVC框架(不含SpringBoot框架)中,默認情況下,響應的String是不支持中文的!
當響應數據的類型是SpringMVC框架默認并不識別的類型時,且當前開發(fā)環(huán)境添加了jackson-databind依賴,SpringMVC框架會自動使用jackson-databind中的轉換器,而jackson-databind中的轉換器的工作方式就是將響應結果組織成JSON格式的數據,并且,將響應頭中的Content-Type設置成了application/json; charset=UTF-8!
在項目中只需要確保添加了jackson-databind依賴即可,并不需要進行額外的配置,也不需要顯式的使用到該框架中的某個類!
如果是使用XML進行相關配置的SpringMVC項目,需要在Spring的配置文件中開啟注解驅動,即在配置文件中添加:
<annotation-driven />
總的來說,如果需要SpringMVC框架能夠響應JSON格式的數據,需要:
使用@RestController或@ResponseBody注解;
在項目中添加jackson-databind依賴;
自定義處理請求的方法的返回值類型(只要是自定義的類型,就一定是SpringMVC框架默認不識別的類型)
當然,某個控制器類中,如果已經使用了@RestController注解,會表示“當前控制器類中處理的所有請求都將響應數據”,就不會執(zhí)行轉發(fā)或重定向的操作了,如果一定要執(zhí)行轉發(fā)或重定向,可以:
不使用@RestController注解,而是在每個需要響應數據的方法之前逐一添加@ResponseBody注解;
在使用@RestController的情況下,將需要轉發(fā)或重定向的方法的返回值類型聲明為ModelAndView類型。